有没有办法看一行是否包含与一组正则表达式模式匹配的单词?如果我有[regex1, regex2, regex3],并且我想看一条线是否匹配其中任何一条,我该怎么做?现在,我正在使用re.findall(regex1, line),但它一次只匹配1个正则表达式.
jsb*_*eno 36
您可以使用内置函数any(或者all如果所有正则表达式都必须匹配)和Generator表达式来遍历所有正则表达式对象.
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])如果正则表达式不是预编译的正则表达式对象,当然)
虽然与在单个表达式中组合正则表达式相比,这将是无效的 - 如果此代码是时间或cpu关键,您应该尝试使用特殊的|正则表达式运算符来分隔原始表达式,组成包含所有需求的单个正则表达式.组合所有正则表达式的一种简单方法是使用字符串"join"运算符:
re.match("|".join([regex_str1, regex_str2, regex_str2]) , line)
虽然如果原始的正则表达式已经使用了|运算符,那么在这个表单上组合正则表达式会导致错误的表达式.
您可以循环遍历正则表达式项目并进行搜索。
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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30916 次 |
| 最近记录: |