簡體   English   中英

將字符串中間的管道字符與python正則表達式匹配

[英]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')
>>> 

所以我可以匹配| |az| 但我找不到匹配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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM