我有一份包含多种信息的文件。我想要的是构建一个Notepad++ Regex替换函数,该函数在文档中找到以下行,并用下划线(_)替换"“之间的空格。
示例:这一行是:
&LOG Part: "NAME TEST.zip"其结果应该是:
&LOG Part: "NAME_TEST.zip"最好的解决方案是regex找到&LOG部件:"NAME TEST.zip“行,并用下划线替换空格。
我现在尝试的是这样的表达,以找到“”之间的文本:
\"[^"]*\"它应该这样做,但我不知道用哪个表达式来用下划线代替空格。
有人能帮上忙吗?谢谢!
发布于 2016-03-22 13:24:31
\"[^"]*\"将只匹配从"到另一个最接近的"的整个子字符串,而不匹配要替换的单个空格。
由于Notepad++不支持无限宽后视,唯一可能的解决方案是使用基于\G的正则表达式设置边界并使用多个匹配(此匹配将用1_替换连续的空格):
(?:"|(?!^)\G)\K([^ "]*) +(?=[^"]*")或者(如果每个空格应该用下划线替换):
(?:"|(?!^)\G)\K([^ "]*) (?=[^"]*")代之以$1_。如果只需要在&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"`+ -一个或多个文字空格(用\h替换为匹配所有水平空格,或用\s替换为匹配任何空格)(?=[^"]*") -检查当前头寸前是否有双引号https://stackoverflow.com/questions/36155447
复制相似问题