我需要搜索可能有許多元字符的模式。目前我使用一個很長的正則表達式。在Python中轉義所有元字符
prodObjMatcher=re.compile(r"""^(?P<nodeName>[\w\/\:\[\]\<\>\@\$]+)""", re.S|re.M|re.I|re.X)
(我的實際模式是很長,所以我只是貼在我需要幫助的一些相關的部分)
,這是特別痛苦的時候,我需要一個重新編譯寫這樣的模式的組合。
是否有縮短圖案長度的pythonic方法?
我需要搜索可能有許多元字符的模式。目前我使用一個很長的正則表達式。在Python中轉義所有元字符
prodObjMatcher=re.compile(r"""^(?P<nodeName>[\w\/\:\[\]\<\>\@\$]+)""", re.S|re.M|re.I|re.X)
(我的實際模式是很長,所以我只是貼在我需要幫助的一些相關的部分)
,這是特別痛苦的時候,我需要一個重新編譯寫這樣的模式的組合。
是否有縮短圖案長度的pythonic方法?
你看,你的模式可以降低到
r"""^(?P<nodeName>[]\w/:[<>@$]+).*?"""
注意,你不必永遠逃避的字符類的任何非文字字符,除了速記班,^
,-
,]
,和\
。有辦法讓即使是那些(除\
)在字符類轉義:
]
在字符類-
在字符類^
的開始/結束的開始 - 如果將它放在字符類的起始處作爲文字符號,應該只能被轉義。在字符類之外,你必須逃脫\
,[
,(
,)
,+
,$
,^
,*
,?
,.
。
請注意/
不是Python正則表達式模式中的一個特殊的正則表達式元字符,並且不必轉義。
定義您的正則表達式模式以避免問題(如混淆字邊界r'\b'
和退格'\b'
)使用原始字符串文字。
謝謝,這是有用的信息。 –
如果匹配空字符串,爲什麼在末尾使用'。*?'?另外,除了速記類,'''''''',''''和''''''外,你不必*字符類中的任何字符。有些方法可以保留字符類中未轉義的字符(除了'''')。 –
除了註釋之外,這聽起來像'xml' **解析**(節點名稱???)的工作。 – Jan
@WiktorStribiżew***我的實際模式很長,所以我只是粘貼了一些我需要幫助的相關部分***。如果能夠得到所要求的答案,這將是一件好事。我還不是Python中的正則表達式的專家,因此通常會轉義元字符。隨着時間的推移,可能會學習逃避什麼,哪些不會。 –