python正则表达式不';t如预期匹配(和pythex.org一样)

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

我正在使用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 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