在Python中将许多类似的正则表达式合二为一

时间:2014-04-04 07:10:07

标签: python regex

我不熟悉正则表达式。实际上,我刚刚开始使用它。我有三种不同的模式

pattern = re.compile(r'SETUP...\d+')
pattern = re.compile(r'PRO...\d+')
pattern = re.compile(r'INSTALL...\d+')

我的一些字符串是SETUP1234, SETUP = 1234, SETUP 1234, SETUP-1234等。与其他字符串相同。所以,我认为前缀和数字之间的3个字符是使用它的合理方式。但我现在的问题是,我可以将它们中的三个合并到一个正则表达式中,而不是调用三个不同的findall吗?

1 个答案:

答案 0 :(得分:4)

您可以像这样使用|

pattern = re.compile(r'(SETUP|PRO|INSTALL)...\d+')

表示SETUPPROINSTALL中的任何一个。

此外,该模式可以稍微改进,如此

pattern = re.compile(r'(SETUP|PRO|INSTALL).{1,3}\d+')

这允许在单词和数字之间使用1到3个字符。

作为Tim suggested in the comments,您可以像这样使用non-capturing group

pattern = re.compile(r'(?:SETUP|PRO|INSTALL).{1,3}\d+')
print pattern.findall("SETUP 1234")
# ['SETUP 1234']
print pattern.findall("PRO 1234")
# ['PRO 1234']
print pattern.findall("INSTALL 1234")
# ['INSTALL 1234']