使用正则表达式仅匹配一行中的第一个匹配项

使用正则表达式仅匹配一行中的第一个匹配项

我对正则表达式很陌生,如果能得到任何帮助我将非常感激。

任务很简单。我有一个 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 = 粘性模式(在特定位置搜索)

相关内容