有沒有辦法查看某行是否包含與一組正則表達式模式相匹配的單詞? 如果我有[regex1, regex2, regex3]
,我想查看一行是否匹配其中的任何一行,我該怎麼做? 現在,我正在使用re.findall(regex1, line)
,但它一次只匹配1個正則表達式。使用Python將一行與多個正則表達式匹配
回答
您可以使用內置函數any
(或all
,如果所有正則表達式必須匹配)和一個生成器表達式來通過所有正則表達式對象。
any (regex.match(line) for regex in [regex1, regex2, regex3])
(或any(re.match(regex_str, line) for regex in [regex_str1, regex_str2, regex_str2])
如果正則表達式沒有預編譯regex對象,當然)
雖然將相比,你正則表達式中的單個表達式組合是ineficient - 如果這個代碼是時間或cpu critical,則應嘗試使用特殊的|
正則表達式來分隔原始表達式,然後組合一個包含所有需求的正則表達式。 一個簡單的方法將所有regexs結合是使用字符串「加入」運營商:
re.match("|".join([regex_str1, regex_str2, regex_str2]) , line)
雖然這種形式的結合正則表達式可能會導致錯誤的表現,如果原有的已經做使用的|
運營商。
試試這個新的正則表達式:(regex1)|(regex2)|(regex3)。這將匹配任何3個正則表達式中的一行。
'(?:...)'在這裏可能比'(...)'更好,避免產生虛假的捕獲組。 – 2012-01-17 02:52:56
@Karl ...除非你想檢查'.group(n)'的真實性,以確定你捕獲了哪個*組。 – 2014-08-08 21:12:07
您可以通過正則表達式項目進行循環並執行搜索。
regexList = [regex1, regex2, regex3]
line = 'line of data'
gotMatch = False
for regex in regexList:
s = re.search(regex,line)
if s:
gotMatch = True
break
if gotMatch:
doSomething()
- 1. python正則表達式匹配多行和其他匹配
- 2. 在Python中使用正則表達式完全匹配多行
- 3. 多行正則表達式組匹配
- 4. python正則表達式匹配一個表達式的倍數
- 5. 正則表達式的多個匹配
- 6. 正則表達式匹配多個組
- 7. 多個匹配的正則表達式
- 8. Javascript正則表達式多個匹配
- 9. 正則表達式匹配多個零
- 10. 兩個正則表達式與匹配
- 11. 在Python中匹配多行正則表達式模式
- 12. 使用正則表達式的Javascript正則表達式匹配
- 13. 一個正則表達式匹配由%
- 14. 正則表達式 - 匹配一個字
- 15. Ruby正則表達式與正則表達式匹配
- 16. Mysql的正則表達式:匹配與正則表達式
- 17. 如何用Python正則表達式替換多個匹配/組?
- 18. 需要一個正則表達式匹配多行字符串
- 19. 多個正則表達式的工作不一行匹配
- 20. 匹配列表與正則表達式
- 21. 正則表達式匹配一個或多個組太多
- 22. 使用正則表達式和Python進行短語匹配
- 23. Python不匹配正則表達式
- 24. Python的正則表達式不匹配
- 25. python正則表達式匹配全部
- 26. Python的正則表達式匹配
- 27. 正則表達式匹配 - Python
- 28. Python的 - 非正則表達式匹配
- 29. python正則表達式後綴匹配
- 30. Python - 正則表達式 - 匹配除
如果將每個表達式包裝在圓括號中,可以使聯接方法不太可能失敗。 '('+')|('。join(['foo','bar','baz'])+')''給出''(foo)|(bar)|(baz)''。 – FakeRainBrigand 2012-01-17 02:02:34
更好的是,在'(?:...)'中換行,並將字符串放在一起,以突出其邏輯結構。例如,'''''.join('(?:{0})'.format(x)表示x('foo','bar','baz'))'。 – 2012-01-17 02:53:12
爲我工作....謝謝 – Prateek 2018-01-23 08:57:54