【问题标题】:regex to find a line that has a word without another word正则表达式查找有一个单词而没有另一个单词的行
【发布时间】:2015-10-13 06:53:15
【问题描述】:

我有以下几行

test
words
more words test
&test
words and test

我正在使用 Notepad++,我想要一个正则表达式来查找包含单词“test”的行,如果它在该行中没有符号“&”.. 所以在上面的示例中它应该找到行1, 3, 5 - 但不是第 4 行,该行中有“&”。

我试过了

[&]test[^\&]‎

^(?=.*test)(?!.*(?:&))

但是没有用。

【问题讨论】:

    标签: regex search include notepad++


    【解决方案1】:

    您可以使用这个基于负前瞻的正则表达式:

    ^(?!.*&).*\btest\b
    

    RegEx Demo

    (?!.*&) 将确保该行中没有&。确保使用MULTILINE 模式。

    【讨论】:

    • 谢谢,我在 np++ 中试过,但只找到最后一行。
    • 你可以查看我的演示,它找到了 3 行。在 NP++ 正则表达式工具中,确保 DOTALL 没有被检查,否则只有最后一行匹配。
    • @Mike 这个正则表达式有效。确保光标位于文档的开头,或单击Find All In Current DocumentDOTALL 表示不选中". matches newlines"
    • 感谢@Mariano,我在 OSX 上,所以我前面没有 NP++ 来命名取消选中 DOTALL 等效项的正确选项。是的,这确实意味着 DOT 不能匹配换行符。
    • @anubhava 我是这么认为的,你并没有错过太多。 (为了记录,/m 默认开启)。
    【解决方案2】:

    查找内容:

    ^[^&\n]*test[^&\n]*$
    

    使用negated character class 允许除& 和换行符以外的任何字符。

    【讨论】:

    • 谢谢 Mariano,它也可以。我接受了第一个答案,并将您的答案标记为有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-29
    • 1970-01-01
    相关资源
    最近更新 更多