【问题标题】:Regex - replace blank spaces in line (Notepad++)正则表达式 - 替换行中的空格(记事本++)
【发布时间】:2016-03-22 13:18:14
【问题描述】:

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

示例: 该行是:

&LOG Part: "NAME TEST.zip"

结果应该是:

&LOG Part: "NAME_TEST.zip"

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

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

\"[^"]*\"

应该可以,但我不知道该用哪个表达式将空格替换为下划线。

任何人都可以提供解决方案吗? 谢谢!

【问题讨论】:

    标签: regex tags


    【解决方案1】:

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

    由于 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 以匹配任何空格)
    • (?=[^"]*") - 检查当前位置前面是否有双引号

    【讨论】:

    • 感谢您的回答!但是,我还有其他应保持不受影响的字符串:示例:&LOG Part: "NAME TEST.zip" &LOG Cloning: "TEST_TEST" &LOG Container: "BLA BLA" 仅应考虑 &LOG Part 行并将空格替换为“”之间的下划线。所有其他行(克隆、容器)应保持不受影响。由于我是这方面的新手,您能否推荐其他 Notepad++ 解决方案,或者无论如何都可以使用它?感谢您的回答!
    • 感谢您的解决方案和解释!效果很好!
    猜你喜欢
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    相关资源
    最近更新 更多