正则表达式替换多个文件中任意行上特定单词后的空格

正则表达式替换多个文件中任意行上特定单词后的空格

我正在使用 Sublime Text,我想知道是否有办法使用 Regex 来做到这一点:

我有多个包含不同行和文本的文件。

在每个行中,我都有一行以“NAME:”开头,并继续显示该人的姓名:

NAME : john doe smith

我希望使用正则表达式将文本中的空格替换john doe smith为字符_(基本上位于文本之后)NAME :,因此新行将是:

NAME : john_doe_smith

到目前为止,我已经尝试这样做:将包含“NAME”的行(无法使其与完整的“NAME:”)与Find匹配:

^.*\b(NAME)\b.*$

但我不知道如何替换匹配后的空格。

有没有办法用 Regex 来实现这一点?

答案1

根据您的正则表达式风格,您可以执行以下操作:

  • 寻找:(?:^NAME : |\G(?!^))\w+\K\h
  • 代替:_

可以进行演示和解释在 Regex101 上找到

答案2

这取决于您在哪里使用正则表达式:

以下使用 sed:

sed ':redo s/^\(\s*NAME\s*:\s*\S\+\)\s\+\([^_[:space:]]\)/\1_\2/ ;t redo' files

这里的技巧是t redo,它会根据条件分支回到标签重做,重新运行替换直到失败。

请注意,该模式包含一些粘合部分,以便在:可选项周围留出空格,忽略尾随空格,并将多个空格减少为一个_

相关内容