只匹配一行中的第一次出现正则表达式

cow*_*hay 52 regex

我对正则表达式完全陌生,我将不胜感激任何帮助。

任务很简单。我有一个 CSV 文件,其中的记录如下所示:

12345,67890,12345,67890
12345,67890,12345,67890
12345,67890,12345,67890
12345,67890,12345,67890
12345,67890,12345,67890
Run Code Online (Sandbox Code Playgroud)

对于每一行,我想用空格替换第一个逗号,并使其余的逗号保持不变。是否有只匹配第一个逗号的正则表达式?

我尝试这样做:^.....,。这匹配逗号,但是,它也匹配逗号前面的字符串的整个长度,因此如果我尝试用空格替换它,所有数字也会被删除。

Mat*_*Mat 70

匹配模式可能是:

^([^,]+),
Run Code Online (Sandbox Code Playgroud)

这意味着

^        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
Run Code Online (Sandbox Code Playgroud)

例如在 perl 中,整个匹配和替换看起来像:

s/^([^,]+),/\1 /
Run Code Online (Sandbox Code Playgroud)

替换部分只需要匹配的整个内容并将其替换为您记住的第一个块并附加一个空格。昏迷被“丢弃”,因为它不在第一个捕获组中。


小智 9

s/,/ /
Run Code Online (Sandbox Code Playgroud)

默认情况下(即没有g选项),这仅替换第一个匹配项。

  • 这是 `sed`、`perl` 和其他一些工具的语法。 (2认同)