【问题标题】:RegExp exclusion, looking for a word not followed by another正则表达式排除,寻找一个单词后面没有另一个
【发布时间】:2021-08-18 15:15:21
【问题描述】:

我正在尝试搜索所有出现的“Tom”,但后面没有“Thumb”。

我已经尝试过寻找

Tom ^((?!Thumb).)*$

但我仍然得到与 Tom Thumb 匹配的行。

【问题讨论】:

  • 即使在这样一个简单的情况下,有一些样本输入和预期输出总是有帮助的。例如,您只想匹配“Tom”还是“Tom + all to the end”?
  • 我会尽量明确一点。我想在一行中的任何位置找到任何出现的“Tom”,但我不想看到任何包含“Tom Thumb”的行

标签: regex


【解决方案1】:

你没有说你正在使用什么风格的正则表达式,但这应该可以正常工作:

 Tom(?!\s+Thumb)

【讨论】:

  • 您可能会认为它适用于诸如“TomThumb”之类的事件(它们之间没有空格)。为了让它工作,你需要从你的正则表达式中删除“\s+”。示例:汤姆(?!拇指)
【解决方案2】:

Tom(?!\s+Thumb) 是您要搜索的内容。

【讨论】:

    【解决方案3】:

    如果您不是在寻找整个单词,您可以使用以下正则表达式:

    Tom(?!.*Thumb)
    

    如果在想要的匹配之后有更多的单词需要检查,你可以使用

    Tom(?!.*(?:Thumb|Finger|more words here))
    Tom(?!.*Thumb)(?!.*Finger)(?!.*more words here)
    

    要使.匹配换行符,请参考How do I match any character across multiple lines in a regular expression?

    this regex demo

    如果您要查找整个单词(即整个单词 Tom 仅在其右侧没有完整单词 Thumb 时才应匹配),请使用

    \bTom\b(?!.*\bThumb\b)
    

    another regex demo

    注意:

    • \b - 匹配前导/尾随单词边界
    • (?!.*Thumb) - 是一个负前瞻,如果有任何 0+ 个字符(取决于引擎,包括/不包括换行符)后跟 Thumb,则匹配失败。

    【讨论】:

    • 我永远不会掌握正则表达式:S
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 2021-10-08
    相关资源
    最近更新 更多