我有一份包含多种信息的文件。我想要的是构建一个Notepad ++ Regex替换函数,它在文档中找到以下行,并用“下划线(_)替换”“”之间的空格。
实施例: 该行是:
&LOG Part: "NAME TEST.zip"
结果应为:
&LOG Part: "NAME_TEST.zip"
完美的解决方案是正则表达式找到& LOG Part:“NAME TEST.zip”行并用下划线替换空格。
我现在尝试的是这个表达式来查找“”:
之间的文本\"[^"]*\"
应该这样做,但我不知道用下划线替换空格的表达式。
任何人都可以帮忙解决问题? 谢谢!
答案 0 :(得分:0)
\"[^"]*\"
只会匹配从"
到另一个最接近的"
的整个子字符串,而不会匹配您要替换的单个空格。
由于Notepad ++不支持无限宽度lookbehind,唯一可能的解决方案是使用基于\G
的正则表达式设置边界并使用多个匹配(这个将用1 _
替换连续的空格) :
(?:"|(?!^)\G)\K([^ "]*) +(?=[^"]*")
或(如果每个空格应替换为下划线):
(?:"|(?!^)\G)\K([^ "]*) (?=[^"]*")
并替换为$1_
。如果您需要限制只更换内部&LOG Part
,只需将其添加到开头:
(?:&LOG Part:\s*"|(?!^)\G)\K([^ "]*) (?=[^"]*")
正则表达式的人类可读解释:
(?:"|(?!^)\G)\K
- 找到"
,或者,在每次后续成功匹配时,找到上一个成功匹配位置的结尾,并省略缓冲区中的所有文本(感谢\K
)([^ "]*) - (Group 1, accessed with
$ 1 from the replacement pattern) 0+ characters other than a space and
“` +
- 一个或多个文字空格(替换为\h
以匹配所有水平空格,或\s
以匹配任何空格)(?=[^"]*")
- 检查当前位置前是否有双引号