在Python中将许多类似的正则表达式组合成一个正则表达式

在Python中将许多类似的正则表达式组合成一个正则表达式,python,regex,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个字符是使用它的合理方式。但我现在的问题是,我能不能将这三个函数

我不熟悉正则表达式。事实上,我才刚开始。我有三种不同的模式

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?

你可以这样使用

pattern = re.compile(r'(SETUP|PRO|INSTALL)...\d+')
pattern = re.compile(r'(SETUP|PRO|INSTALL).{1,3}\d+')
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']
这意味着任何安装程序、PRO或INSTALL

另外,模式可以稍微改进,如下所示

pattern = re.compile(r'(SETUP|PRO|INSTALL)...\d+')
pattern = re.compile(r'(SETUP|PRO|INSTALL).{1,3}\d+')
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']
这允许在单词和数字之间使用1到3个字符

你可以这样用

pattern = re.compile(r'(SETUP|PRO|INSTALL)...\d+')
pattern = re.compile(r'(SETUP|PRO|INSTALL).{1,3}\d+')
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']
你可以这样用

pattern = re.compile(r'(SETUP|PRO|INSTALL)...\d+')
pattern = re.compile(r'(SETUP|PRO|INSTALL).{1,3}\d+')
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']
这意味着任何安装程序、PRO或INSTALL

另外,模式可以稍微改进,如下所示

pattern = re.compile(r'(SETUP|PRO|INSTALL)...\d+')
pattern = re.compile(r'(SETUP|PRO|INSTALL).{1,3}\d+')
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']
这允许在单词和数字之间使用1到3个字符

你可以这样用

pattern = re.compile(r'(SETUP|PRO|INSTALL)...\d+')
pattern = re.compile(r'(SETUP|PRO|INSTALL).{1,3}\d+')
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']

如果您想要非捕获版本,您可以使用?:SETUP | PRO | INSTALL…\d+此选项仅返回模式的第一部分,例如SETUP@Sfinos请检查更新的答案,非捕获版本将给出整个字符串。如果您想要非捕获版本,你能做到吗?:SETUP | PRO | INSTALL…\d+这只返回模式的第一部分例如SETUP@Sfinos请检查更新的答案,非捕获版本将给出整个字符串。