当前位置:  开发笔记 > 编程语言 > 正文

re.DOTALL和re.MULTILINE有什么区别?

如何解决《re.DOTALL和re.MULTILINE有什么区别?》经验,为你挑选了1个好方法。

当在多行上匹配一个表达式时,我总是使用re.DOTALL它并且工作正常。现在,我偶然发现了re.MULTILINE字符串,看起来好像在做同样的事情。

re模块中(没有更清楚,但是值不同):

M = MULTILINE = sre_compile.SRE_FLAG_MULTILINE # make anchors look for newline
S = DOTALL = sre_compile.SRE_FLAG_DOTALL # make dot match newline

SRE_FLAG_MULTILINE = 8 # treat target as multiline string
SRE_FLAG_DOTALL = 16 # treat target as a single string

用法上有区别吗?在什么情况下它可以返回不同的东西?



1> Martijn Piet..:

他们是完全不同的。是的,两者都影响换行符的处理方式,但是它们会切换不同概念的行为。

re.MULTILINE影响位置^$ 锚点匹配的位置。

没有开关,^并且$仅在整个文本的开头和结尾处匹配。使用该开关,它们也将在换行符之前或之后匹配:

>>> import re
>>> re.search('foo$', 'foo\nbar') is None  # no match
True
>>> re.search('foo$', 'foo\nbar', flags=re.MULTILINE)
<_sre.SRE_Match object; span=(0, 3), match='foo'>

re.DOTALL影响. 模式可以匹配的内容。

如果没有切换,则.匹配除换行符之外的任何字符。通过该开关,换行符也将匹配:

>>> re.search('foo.', 'foo\nbar') is None  # no match
True
>>> re.search('foo.', 'foo\nbar', flags=re.DOTALL)
<_sre.SRE_Match object; span=(0, 4), match='foo\n'>

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有