猿问

匹配列表中 4 个或更多单词的正则表达式

背景

我们有一个维护正则表达式存储库的系统,并根据这些正则表达式检查一些传入文本以用于某些过滤目的。我们正在尝试构建的正则表达式之一如下所述。由于生产限制,我正在寻找的解决方案严格基于正则表达式。

问题

我有一个单词列表:word1、word2、word3、word4、word5、word6、word7、word8、word9、word10。我正在尝试编写一个匹配字符串的正则表达式,如果它包含 4 个或更多这些单词,在任何位置的任何位置。

例子

  • "Abc word3 def word2 ghi word7 jkl word1 mno word5" 应该是匹配的,因为它在给定列表中包含超过 4 个单词。

  • "Abc word2 def ghi word8" 不应该匹配,因为它只有给定列表中的 2 个单词。

当前状态

我有以下正则表达式,但它似乎没有做我需要的。

((?i)((word1)|(word2)|(word3)|(word4)|(word5)|(word6)|(word7)|(word8)|(word9)|(word10))\b){4,}

请用 Java 或 Python 表示法提出任何建议?

编辑:添加了一些背景信息。


九州编程
浏览 75回答 3
3回答

千万里不及你

以下正则表达式适用于我的所有测试:(?i)(.*(^|\b)((word1)|(word2)|(word3)|(word4)|(word5)|(word6)|(word7)|(word8)|(word9)|(word10))($|\b).*){4,}他们包括:“Abc word3 def word2 ghi word7 jkl word1 mno word5”-> true“Abc word2 def ghi word8”-> false“word3 sadasd sadasd word1 word2 word4”-> true“word3 sadasd sadasd word1 word2word4”-> false“aword3 sadasd sadasd word1 word2 word4”-> false“word3 sadasd sadasd word1 word2 word4a”-> false我认为您的原始正则表达式主要缺少.*匹配关键字前后的任何字符串。我还仔细检查了它是否是关键字(测试 5)之前的行首或边界字符,我认为这也是缺失的。

胡说叔叔

您不需要使用正则表达式。如果您只关心任何单词的出现次数,那么您可以将输入列表转换为 aset并对其执行intersection操作。wrd_list = ["word1", "word2", "word3", "word4", "word5", "word6", "word7", "word8", "word9", "word10"]s = "Abc word3 def word2 ghi word7 jkl word1 mno word5"if len(set(wrd_list).intersection(s.split())) > 4:    print('more than 4 occurrences found')编辑:此代码在 Python 中

慕尼黑5688855

也许这个(不是正则表达式,但我认为更具可读性):words = ['word1', 'word2', 'word3', 'word4', 'word5', 'word6', 'word7', 'word8', 'word9', 'word10']text = "Abc word2 def ghi word8"sum(i in text for i in words)
随时随地看视频慕课网APP

相关分类

Python
我要回答