您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 将几个正则表达式合并到一个RE中

5b51 2022/1/14 8:22:35 python 字数 3003 阅读 571 来源 www.jb51.cc/python

我已经写了2个RE来匹配String中的多个字符串序列.例如.让我们假设两个正则表达式是RE1,RE2.字符串可以是这四种形式; 1) Match ONLY RE1 'one or more times' 2) Match ONLY RE2 'one or more times' 3) Match RE1 'one or more times' AND match RE2 'one or mor

概述

1) Match ONLY RE1 'one or more times'
2) Match ONLY RE2 'one or more times'
3) Match RE1 'one or more times' AND match RE2 'one or more times'
4) Match NEITHER RE1 NOR RE2 

目前我正在使用如果检查这些,但我知道它非常昂贵,因为我正在做一个特定的字符串匹配几次.我想到使用’或’|但问题是正则表达式将停止匹配,一旦找到第一个匹配的序列,而不是继续寻找其他的.我想找到匹配的序列“一次或多次”.

更新:

eg: RE1 = (\d{1,3}[a-zA-Z]?/\d{1,3}[a-zA-Z]?)
    RE2 = (\babc\b)
String: *some string* 100/64h *some string* 120h/90 *some string* abc 200/100 abc *some string* 100h/100f

Matches: '100/64h','120h/90','abc','200/100','100h/100f'

如何合并这2个RE来使我的程序有效.我正在使用python来代码.

re1_matches = re.findall(re1,text)
re2_matches = re.findall(re2,text)

这将导致两个匹配列表.然后,您可以对这些列表执行布尔运算,以生成您需要的任何结果;或者如果您需要一个列表中的所有匹配,您可以连接它们.您也可以使用re.match(匹配在字符串的开头匹配)或re.search(匹配字符串中的任何位置),如果您不需要列表的结果,但只需要知道有匹配.

无论如何,在这种情况下创建一个更复杂的RE可能不是必需或不可取的.

但是,我并不清楚你想要什么,所以我可能错了.

关于如何使用布尔运算符来处理列表的一些建议.首先一些设置:

>>> re1 = r'(\d{1,3}[a-zA-Z]?)'
>>> re2 = r'(\babc\b)'
>>> re.findall(re1,text)
['100/64h','100h/100f']
>>> re.findall(re2,text)
['abc','abc']
>>> re1_matches = re.findall(re1,text)
>>> re2_matches = re.findall(re2,text)
>>> rex_nomatch = re.findall('conglomeration_of_sandwiches',text)

如果所有结果都为True,则返回第一个False结果或最终结果.

>>> not re1_matches and re2_matches
False

所以如果你想要列表而不是平面布尔值,你必须测试你想要的结果最后:

>>> not rex_nomatch and re1_matches
['100/64h','100h/100f']

同理:

>>> not rex_nomatch and re2_matches
['abc','abc']

如果你只想知道两个RE都产生了匹配,但是不再需要了,你可以这样做:

>>> re1_matches and re2_matches
['abc','abc']

最后,如果两个RE都产生匹配,这是一个紧凑的方法来获得连接:

>>> re1_matches and re2_matches and re1_matches + re2_matches
['100/64h','100h/100f','abc']

总结

以上是编程之家为你收集整理的python – 将几个正则表达式合并到一个RE中全部内容,希望文章能够帮你解决python – 将几个正则表达式合并到一个RE中所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶