繁体   English   中英

python正则表达式与预期不匹配(和pythex.org一样)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM