python正则表达式不';t如预期匹配(和pythex.org一样)
我正在使用Python3.4.2、2.7.9以及在线测试程序,并在相同的输入上获得不同的结果。在下面的示例中,我试图匹配由“|”或字符串结尾分隔的单词python正则表达式不';t如预期匹配(和pythex.org一样),python,regex,Python,Regex,我正在使用Python3.4.2、2.7.9以及在线测试程序,并在相同的输入上获得不同的结果。在下面的示例中,我试图匹配由“|”或字符串结尾分隔的单词 for w in ['OR', 'ELSE', 'WHAT']: m=re.match(r'(^|\|)(%s)($|\|)'%w,r'OR|ELSE|WHAT') if m: print(m.group()) m=re.match(r'(^|\|)(ELSE)(\||$)',r'OR|ELSE|WHAT') if
for w in ['OR', 'ELSE', 'WHAT']:
m=re.match(r'(^|\|)(%s)($|\|)'%w,r'OR|ELSE|WHAT')
if m:
print(m.group())
m=re.match(r'(^|\|)(ELSE)(\||$)',r'OR|ELSE|WHAT')
if m:
print(m.group())
只在本地运行
OR|
因此,在pythex上,我得到了所有单词()的预期匹配项。我在使用例如*WORD.*
而不是之前仅使用WORD
时遇到了一些矛盾
有什么我必须包括的吗?谢谢 只需将不需要的组转换为非捕获组并打印捕获组索引号,这样它就不会包含前面或后面的字符。我建议您使用
re.search
函数而不是re.match
,因为re.match
必须尝试从字符串的开头进行匹配
>>> m=re.search(r'(?:^|\|)(ELSE)(?:\||$)',r'OR|ELSE|WHAT')
>>> if m:
print(m.group(1))
ELSE
>>> re.search(r'(^|\|)(ELSE)(\||$)',r'OR|ELSE|WHAT').group()
'|ELSE|'
你的代码
>>> for w in ['OR', 'ELSE', 'WHAT']:
m=re.match(r'(^|\|)(%s)($|\|)'%w,r'OR|ELSE|WHAT')
if m:
print(m.group())
OR|
为什么上面的代码只显示或|
,主要是因为re.match
功能。它尝试从字符串的开头匹配,因此它检查^
、行的开头或开头的|
。根据给定列表中的单词,它将匹配或
,仅因为它位于开头,而且它还匹配以下|
符号
>>> for w in ['OR', 'ELSE', 'WHAT']:
m=re.search(r'(^|\|)(%s)($|\|)'%w,r'OR|ELSE|WHAT')
if m:
print(m.group())
OR|
|ELSE|
|WHAT