有沒有辦法查看某行是否包含與一組正則表達式模式相匹配的單詞? 如果我有[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. Python正則表達式匹配多次
- 4. python正則表達式匹配多行和其他匹配
- 5. Java匹配器:如何匹配多個行與一個正則表達式
- 6. 在Python中使用正則表達式完全匹配多行
- 7. Python正則表達式不匹配行
- 8. Python正則表達式換行匹配
- 9. python正則表達式匹配一個表達式的倍數
- 10. 多行正則表達式組匹配
- 11. perl正則表達式匹配多行
- 12. Python的正則表達式:在一行中的多個匹配(使用的findAll())
- 13. Python的正則表達式 - 匹配多個表達組
- 14. 正則表達式匹配多表達
- 15. 正則表達式多個匹配(QRegularExpression)
- 16. 正則表達式的多個匹配
- 17. 多個匹配的正則表達式
- 18. Javascript正則表達式多個匹配
- 19. 正則表達式多個匹配
- 20. 正則表達式匹配多個線
- 21. 正則表達式匹配多個組
- 22. 正則表達式匹配多個零
- 23. 兩個正則表達式與匹配
- 24. 使用正則表達式在Python中匹配一個屬性
- 25. 匹配多行與多行正則表達式
- 26. Python的正則表達式 - 與衆多匹配匹配的換行符
- 27. 將字符串與多個正則表達式匹配
- 28. Python正則表達式 - 模式匹配
- 29. 在Python中匹配多行正則表達式模式
- 30. 使用正則表達式的Javascript正則表達式匹配
如果將每個表達式包裝在圓括號中,可以使聯接方法不太可能失敗。 '('+')|('。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