用Python正则表达式匹配字符串中间的管字符
我试图使用Python正则表达式匹配字符串中的管道字符,但似乎无法使其匹配。我把它归结为一个简化的版本 假设我正在字符串中查找序列用Python正则表达式匹配字符串中间的管字符,python,regex,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_Mat
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')
>>>
>>重新导入
>>>关于匹配(r'|','xyz | abc')
>>>关于匹配(r'z |','xyz | abc')
>>>关于匹配(r'| a',xyz | abc')
>>>关于匹配(r'z | a',xyz | abc')
>>>关于匹配(r'z\|a',xyz | abc')
>>>关于匹配(r'z\\\|a',xyz | abc')
>>>关于匹配(r'z\\\\\\\\\\\\\\\\\'a',xyz\\\\'abc')
>>>关于匹配(r'z[|]a',xyz | abc')
>>>
所以我可以匹配|
,|a
和z
,但我找不到匹配z | a
的方法。有什么想法吗?re.match()
正在字符串开头寻找匹配项。改用re.search()
匹配的模式与空字符串匹配。i、 e.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>
重新匹配('z\\|a','xyz | abc')
>>>再搜索('z\\\|a','xyz | abc')
>>>检索(r'z\|a',xyz | abc')
更一般地,你可以在一个字串中使用
myPattern = "how"
re.match('(.)*(%s)' %myPattern, 'Hello, how are you ?')*
匹配正则表达式中的任何内容。基本上,您要求match跳过匹配模式所需的任意数量的字符。使用双引号而不是单引号是行不通的?啊,谢谢-我应该意识到匹配/搜索问题。还有re.escape()
的额外积分(如果我能给他们的话),谢谢@Duncan的回答。为什么'z\\'a'
和'z\'a'
表达式返回相同的结果?在表达式解析之后,'z\\\'a'
->'z\'a'
和'z\'a'
->'z\'a'
,因此它们不应该产生相同的搜索()
结果。请纠正我哪里出了问题。@CᴴᴀZ'Z\\| a'
和'Z\|a'
都是完全相同的字符串。字符串中的\\\\124;
不是有效的Python转义序列,因此Python只将其视为两个字符。谢谢@Duncan,我找到了它。我将这些步骤分解为:stringparse
(查找escape seq)->regex parse
<在字符串解析之后,code>z\\| a计算为z\| a
,而z\| a
计算为z\| a
,如您所述(\\\\
不是有效的转义序列)。由于string parse
之后的结果在这两种情况下是相同的,因此结果也是相同的。