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

时间:2016-03-22 13:18:15

标签: regex tags

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

实施例: 该行是:

&LOG Part: "NAME TEST.zip"

结果应为:

&LOG Part: "NAME_TEST.zip"

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

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

之间的文本
\"[^"]*\"

应该这样做,但我不知道用下划线替换空格的表达式。

任何人都可以帮忙解决问题? 谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

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

或(如果每个空格应替换为下划线):

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

并替换为$1_。如果您需要限制只更换内部&LOG Part,只需将其添加到开头:

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

enter image description here

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

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