正则表达式 - 替换行中的空格 (Notepad++)

Regex - replace blank spaces in line (Notepad++)

我有一份包含多项信息的文件。我想要的是构建一个 Notepad++ Regex 替换函数,它在文档中找到以下行并将“”之间的空白 spaces 替换为下划线 (_).

示例: 该行是:

&LOG Part: "NAME TEST.zip"

结果应该是:

&LOG Part: "NAME_TEST.zip"

完美的解决方案是正则表达式找到 &LOG Part: "NAME TEST.zip" 行并用下划线替换空白 space。

我现在尝试的是这个表达式来查找“”之间的文本:

\"[^"]*\"

应该可以,但我不知道用哪个表达式来用下划线替换空白 spaces。

有人可以帮忙解决吗? 谢谢!

\"[^"]*\" 只会匹配从 " 到另一个最接近的 " 的整个子字符串,而不会匹配您要替换的单个 space。

由于 Notepad++ 不支持无限宽度回溯,唯一可能的解决方案是使用基于 \G 的正则表达式来设置边界并使用多重匹配(这个将替换连续的 space 为1 _):

(?:"|(?!^)\G)\K([^ "]*) +(?=[^"]*")

或者(如果每个space都应该用下划线代替):

(?:"|(?!^)\G)\K([^ "]*) (?=[^"]*")

并替换为_。如果你需要限制只在 &LOG Part 内替换,只需将它添加到开头:

(?:&LOG Part:\s*"|(?!^)\G)\K([^ "]*) (?=[^"]*")

人类可读的正则表达式解释:

  • (?:"|(?!^)\G)\K - 找到一个 ",或者,对于每个后续成功匹配,前一个成功匹配位置的结尾,并省略缓冲区中的所有文本(感谢 \K)
  • ([^ "]*) - (Group 1, accessed with$1from the replacement pattern) 0+ characters other than a space and"`
  • + - 一个或多个文字 spaces(替换为 \h 以匹配所有水平白色 space,或替换为 \s 以匹配任何白色space)
  • (?=[^"]*") - 检查当前位置前面是否有双引号