有没有更简洁的方法在python中编写长正则表达式模式?我在某处看到了这种方法,但python中的正则表达式不允许列表。
patterns = [
re.compile(r'<!--([^->]|(-+[^->])|(-?>))*-{2,}>'),
re.compile(r'\n+|\s{2}')
]
答案 0 :(得分:26)
您可以使用详细模式编写更易读的正则表达式。在这种模式下:
以下两个陈述是等效的:
a = re.compile(r"""\d + # the integral part
\. # the decimal point
\d * # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")
(取自verbose mode的文件)
答案 1 :(得分:13)
虽然@Ayman关于re.VERBOSE
的建议是一个更好的主意,如果你想要的只是你所展示的,那就去做:
patterns = re.compile(
r'<!--([^->]|(-+[^->])|(-?>))*-{2,}>'
r'\n+|\s{2}'
)
和Python的相邻字符串文字的自动连接(很像C,btw)将完成剩下的工作; - )。
答案 2 :(得分:2)
你可以在正则表达式中使用注释,这使得它们更具可读性。以http://gnosis.cx/publish/programming/regular_expressions.html:
为例/ # identify URLs within a text file
[^="] # do not match URLs in IMG tags like:
# <img src="http://mysite.com/mypic.png">
http|ftp|gopher # make sure we find a resource type
:\/\/ # ...needs to be followed by colon-slash-slash
[^ \n\r]+ # stuff other than space, newline, tab is in URL
(?=[\s\.,]) # assert: followed by whitespace/period/comma
/