有没有办法查看某行是否包含与一组正则表达式模式相匹配的单词? 如果我有[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