【问题标题】:Regular expression: which pattern would return true if both exact words were found?正则表达式:如果找到两个确切的单词,哪种模式会返回 true?
【发布时间】:2011-08-09 17:35:46
【问题描述】:

如果我的正则表达式模式@"\b(word1|word2)\b" 在只找到一个确切的单词时返回 true,如果找到两个确切的单词,哪个模式会返回 true?

我发现的唯一示例就像我做到了,只要找到 1 个单词就返回 true,但我希望它在找到所有单词时返回 true。所以同一个词的倍数不算数。我需要知道所有单词是否至少出现 1 次。

编辑:

示例: “敏捷的棕狐跳过懒惰的狗”

模式:@"\b(fox|dog)\b"

pattern: @"\b(fox|elephant)\b"

补充:我必须灵活,因为要搜索的字数取决于我的用户。

【问题讨论】:

  • 它们之间有单词边界吗?如果您提供一个示例单词列表和一些您想要匹配或不匹配的示例字符串,那将非常有帮助。
  • 制作 2 个正则表达式怎么样?它会简化很多。

标签: c# regex


【解决方案1】:

您可以使用前瞻来实现此目的

(?=.*\bWord1\b)(?=.*\bWord2\b).*

here on Regexr

(?=.*\bWord1\b) 是一个积极的前瞻。它检查内部模式是否出现在字符串中。它不匹配任何东西!

要匹配字符串,末尾有.*,但这只有在两个前瞻都为真时才会匹配,即你的两个词都在字符串中找到。

【讨论】:

    【解决方案2】:

    简单的答案是有两个正则表达式,一个用于第一个单词,一个用于另一个,如果两者都返回 true(和它们),则结果为 true。

    @"\b(word1)\b"@"\b(word2)\b"

    您也可以查看here

    【讨论】:

    • 他使用的是 C#,而不是 Java。
    【解决方案3】:

    如果必须的话,

    @"\b(word1\b(.*\b)?word2|word2\b(.*\b)?word1)\b"
    

    但最好使用两个正则表达式。

    【讨论】:

      【解决方案4】:

      Stema 的回答是最好的 imo。

      以下是查尔斯的简化版

      鉴于:“word and word2 and word3 and word4.word4是个好人,不是word1吗?”

      (\bword4\b.\bword2\b|\bword2\b.\bword4\b)

      但就像我说的 Stema ftw

      【讨论】:

        猜你喜欢
        • 2017-06-27
        • 1970-01-01
        • 1970-01-01
        • 2018-03-15
        • 2017-12-23
        • 1970-01-01
        • 2012-02-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多