我对正则表达式很陌生,如果能得到任何帮助我将非常感激。
任务很简单。我有一个 CSV 文件,其中的记录如下:
12345,67890,12345,67890
12345,67890,12345,67890
12345,67890,12345,67890
12345,67890,12345,67890
12345,67890,12345,67890
我想将第一行的第一个逗号替换为空格,其余的逗号保持不变,对于每一行。是否有一个正则表达式只匹配第一个逗号?
我试过这个:^.....,
。这匹配逗号,但是,它也匹配逗号前面的整个字符串的长度,所以如果我尝试用一个替换它空间所有号码也将被删除。
答案1
匹配模式可以是:
^([^,]+),
这意味着
^ starts with
[^,] anything but a comma
+ repeated one or more times (use * (means zero or more) if the first field can be empty)
([^,]+) remember that part
, followed by a comma
例如在 perl 中,整个匹配和替换将如下所示:
s/^([^,]+),/\1 /
替换部分只是取出匹配的所有内容,并将其替换为您记住的第一个块,然后添加一个空格。逗号被“删除”,因为它不在第一个捕获组中。
答案2
s/,/ /
默认情况下(即没有选项g
),仅替换第一个匹配项。
答案3
这应该只匹配第一个数字和逗号:^(\d{5}),
。如果你想要吞噬行中的所有其他内容,请将正则表达式更改为:^(\d{5}),(.*)$
答案4
要仅匹配任何正则表达式的第一次出现,请删除所有标志。每个正则表达式都带有以下可能的标志,并且通常默认使用将匹配多个出现的全局标志:
- /g = 使用此标志,搜索将查找所有匹配项,如果没有此标志,则仅返回第一个匹配项
- /i = 不区分大小写
- /m = 多行模式
- /s = all . 匹配换行符 \n
- /u = unicode
- /y = 粘性模式(在特定位置搜索)