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

你说“我知道它非常昂贵,因为我正在做一个特定的字符串匹配几次.”这对我来说,你正在运行每个RE几次.在这种情况下,您正在犯错误,无需编写更复杂的RE即可解决.

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正则表达式拼接)