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

时间:2011-11-25 18:29:23

标签: 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')
>>> 

所以我可以与||az|匹配,但我找不到匹配z|a的方法。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

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>

更一般地说,你可以在一个文字字符串上使用re.escape(),你需要将它包含在一个更复杂的正则表达式的中间,以避免必须弄清楚你需要多少反斜杠。

答案 1 :(得分:0)

您可以使用以下方法让re.match匹配字符串的中间部分。

myPattern = "how"

re.match('(.)*(%s)' %myPattern, 'Hello, how are you ?')*

.匹配正则表达式中的任何内容。基本上,您要求匹配跳过匹配您的模式所需的任意数量的字符。