我需要搜索可能有许多元字符的模式。目前我使用一个很长的正则表达式。在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中的正则表达式的专家,因此通常会转义元字符。随着时间的推移,可能会学习逃避什么,哪些不会。 –