【问题标题】:Regex to match several strings but not specific ones正则表达式匹配多个字符串但不匹配特定字符串
【发布时间】:2014-10-08 14:32:01
【问题描述】:

我正在使用 Perl 来搜索和匹配每行中符合条件的字符串,并希望省略包含特定字符串的行。 我的意思是: 假设我正在匹配字符串 Mouse,但如果该行匹配 X123Y,我想省略。任何一个字符串都可以在该行的任何位置找到。

Stackoverflow Mouse forum.       <--Match
Stackoverflow -Mouse- forum.     <--Match
Stackoverflow X123Y forum Mouse. <--Should not Match
Stackoverflow XYZ forum Mouse.   <--Should not Match

我希望这能解决它,因为我使用的是负前瞻,但似乎没有奏效。

(?i)(\WMouse\W|(?!(X123Y|XYZ)).*$)

我想我在做一些根本错误的事情,但现在看不到。

有什么帮助吗?

【问题讨论】:

    标签: regex perl string-matching


    【解决方案1】:

    这个正则表达式应该适合你:

    ^(?=.*?Mouse)(?:(?!(?:X123|XYZ)).)*$
    

    RegEx Demo

    【讨论】:

    • 只需查看演示链接中的正则表达式描述,了解有关此正则表达式的所有详细信息。之后,请随时提出任何问题,我会在这里回答。
    【解决方案2】:

    您可以使用丢弃技术来保留您想要的内容并丢弃您不想要的模式。

    例如,使用这个正则表达式:

    .*X123Y.*|.*XYZ.*|(.*Mouse.*)
    

    您将获取最正确模式的内容并丢弃其他模式..

    Working demo

    这个想法是使用:

    discard patt 1 | discard patt 2 | discard patt n | (grab this pattern)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-28
      • 1970-01-01
      • 2011-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多