Python正则表达式:选择一个或另一个正则表达式
我试图创建一个正则表达式,它选择使用一个正则表达式或另一个正则表达式,具体取决于输入。下面是我的正则表达式的简化版本:Python正则表达式:选择一个或另一个正则表达式,python,regex,Python,Regex,我试图创建一个正则表达式,它选择使用一个正则表达式或另一个正则表达式,具体取决于输入。下面是我的正则表达式的简化版本: string = '78 east easy street New York NY 11011' REGEX = r'(?:' +\ r'(?P<num1>6\d+)' +\ r'|' +\ '(?P<num2>7\d+)' +\ r')' m = re.match(
string = '78 east easy street New York NY 11011'
REGEX = r'(?:' +\
r'(?P<num1>6\d+)' +\
r'|' +\
'(?P<num2>7\d+)' +\
r')'
m = re.match(REGEX, string)
我的问题是:
1.为什么num1和num2都出现在结果中?它会选择正则表达式1还是2?
2.有没有办法让下面这样的正则表达式工作(在创建复杂模式匹配时会有所帮助):
REGEX = '(?:' + '(?P<num>6\d+)' + '|' + '(?P<num1>7\d+)' + ')'
REGEX='(?:'+'(?P6\d+)'+'|'+'(?P7\d+)'
编辑:我对第一个代码段的预期输出是为字符串选择正确的正则表达式,因此在输出中选择num1或num2。要添加到@Jerry的答案中,可以使用Python的模块来完成 导入正则表达式 >>>s='78纽约东易街NY 11011' >>>m=regex.match(r'(?|)(?P6\d+)(?P7\d+)),s) >>>m.group('num') '78' 被视为重复子模式组的条件正则表达式在该组的
(..)
中的任何子模式中共享相同的数字。如果满足条件,则使用第一个模式;否则使用第二个模式
如文件所述:
具有相同组名的组将具有相同的组号,而具有不同组名的组将具有不同的组号。组号将在分支重置的不同分支之间重复使用…例如,(?|(第一)|(第二))
只有组1
1) 为什么num1和num2都出现在结果中?它会选择正则表达式1还是2
您有两个捕获组,因此将同时显示num1
和num2
。它没有“选择”一个,它只是通过匹配的第一部分。您将获得两个捕获组,无论是否捕获了所有部分,因为它们都在整体表达式中
2) 有没有办法让下面这样的正则表达式工作(在创建复杂模式匹配时会有所帮助):
REGEX = '(?:' + '(?P<num>6\d+)' + '|' + '(?P<num1>7\d+)' + ')'
如果每个“隔间”中有一个捕获组,则它们将进入一个组,两个匹配项中的任何一个
例如
(?|)(?P6\d+)(?P7\d+)
将返回名为
num
的组以及匹配的部分。预期输出是什么?我在第一个代码段上的预期输出是为字符串选择正确的正则表达式,因此在输出上选择num1或num2。预期输出与实际输出有何不同?此外,第一个代码段与第二个输出相同t、 你能详细说明一下你想要两者之间的区别吗?是的,但是(对于更复杂的正则表达式)有可能像我的2ns代码片段那样将它们分开吗?谢谢,这正是我想要的!
>>> import regex
>>> s = '78 east easy street New York NY 11011'
>>> m = regex.match(r'(?|(?P<num>6\d+)|(?P<num>7\d+))', s)
>>> m.group('num')
'78'
REGEX = '(?:' + '(?P<num>6\d+)' + '|' + '(?P<num1>7\d+)' + ')'
(?| ... | ... )
(?|(?P<num>6\d+)|(?P<num>7\d+))