3 回答

TA貢獻1784條經驗 獲得超9個贊
以下正則表達式適用于我的所有測試:
(?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)之前的行首或邊界字符,我認為這也是缺失的。

TA貢獻1804條經驗 獲得超8個贊
您不需要使用正則表達式。如果您只關心任何單詞的出現次數,那么您可以將輸入列表轉換為 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 中

TA貢獻1848條經驗 獲得超2個贊
也許這個(不是正則表達式,但我認為更具可讀性):
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)
添加回答
舉報