[英]Match a pipe character in the middle of a string with a 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')
>>>
所以我可以匹配|
, |a
和z|
但我找不到匹配z|a
。 有任何想法嗎?
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()
,你需要將它包含在一個更復雜的正則表達式的中間,以避免必須弄清楚你需要多少反斜杠。
您可以使用以下方法獲取re.match
以匹配字符串的中間部分。
myPattern = "how"
re.match('(.)*(%s)' %myPattern, 'Hello, how are you ?')*
的.
匹配正則表達式中的任何內容。 基本上,您要求匹配跳過匹配您的模式所需的任意數量的字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.