用python正则表达式匹配字符串中间的管道字符

Ham*_*ner 3 python regex

我正在尝试使用 Python 正则表达式匹配字符串中的管道字符,但似乎无法匹配。我把它归结为一个简化版本。

假设我正在寻找z|a字符串中的序列。以下是一些可能的正则表达式和结果:

>>> import re
>>> re.match(r'|', 'xyz|abc')
<_sre.SRE_Match object at 0x2d9a850>
>>> re.match(r'z|', 'xyz|abc')
<_sre.SRE_Match object at 0x2d9a780>
>>> re.match(r'|a', 'xyz|abc')
<_sre.SRE_Match object at 0x2d9a850>
>>> re.match(r'z|a', 'xyz|abc')
>>> re.match(r'z\|a', 'xyz|abc')
>>> re.match(r'z\\|a', 'xyz|abc')
>>> re.match(r'z\\\|a', 'xyz|abc')
>>> re.match(r'z[|]a', 'xyz|abc')
>>> 
Run Code Online (Sandbox Code Playgroud)

所以,我可以配合||az|但我不能找到一种方法来匹配z|a。有任何想法吗?

Dun*_*can 6

re.match()正在寻找字符串开头的匹配项。使用re.search()来代替。

您匹配的模式与空字符串匹配。即 r'|' 是空字符串还是空字符串,r'z|' 是 z 或空字符串,而 '|a' 是空字符串或 a。所有这些都将匹配任何字符串。

>>> re.match('z\\|a', 'xyz|abc')
>>> re.search('z\\|a', 'xyz|abc')
<_sre.SRE_Match object at 0x02BF2BB8>
>>> re.search(r'z\|a', 'xyz|abc')
<_sre.SRE_Match object at 0x02BF2BF0>
Run Code Online (Sandbox Code Playgroud)

更一般地,您可以re.escape()在需要包含在更复杂的正则表达式中间的文字字符串上使用,以避免必须弄清楚需要多少反斜杠才能对事物进行转义。