[英]python regex doesn't match as expected (and as pythex.org does)
我正在使用Python 3.4.2,2.7.9以及http://pythex.org上的在线测试人员,并在相同的输入上获得不同的结果。 在下面我试图匹配由“|”分隔的单词 或者字符串的结尾。
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上,我得到所有单词的预期匹配( http://bit.ly/1vmIAjX )。 我不得不使用例如.*WORD.*
而不仅仅是WORD
之前。
有什么东西我必须包括在内吗? 谢谢!
只需将不需要的组转换为非捕获组并打印捕获组索引号,以便它不包含前面或后面的字符。 我建议你使用re.search
函数而不是re.match
,因为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|
为什么上面的代码显示OR|
只是因为re.match
功能。 它尝试从字符串的开头匹配,因此它检查^
,行的开头或|
在开始时。 从给定列表中的单词出现,它只会匹配OR
因为它位于开头,并且它与以下内容匹配|
符号。
>>> for w in ['OR', 'ELSE', 'WHAT']:
m=re.search(r'(^|\|)(%s)($|\|)'%w,r'OR|ELSE|WHAT')
if m:
print(m.group())
OR|
|ELSE|
|WHAT
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.