Python 使用$

Python 使用$,python,Python,我正在使用Python 2.7.0,并在解释器中执行以下操作: >>> re.search (r"//\s*.*?$", "//\n\na12345678", flags=re.MULTILINE|re.DOTALL).group() '//\n\na12345678' 这不是我所期望的。我原以为$会在结束行之前匹配,但它包含了两个结束行字符和后面的文本 令人惊讶的是,这是有效的: >>> re.search (r"//\s*.*?$", "//1\n\na

我正在使用Python 2.7.0,并在解释器中执行以下操作:

>>> re.search (r"//\s*.*?$", "//\n\na12345678", flags=re.MULTILINE|re.DOTALL).group()
'//\n\na12345678'
这不是我所期望的。我原以为$会在结束行之前匹配,但它包含了两个结束行字符和后面的文本

令人惊讶的是,这是有效的:

>>> re.search (r"//\s*.*?$", "//1\n\na12345678", flags=re.MULTILINE|re.DOTALL).group()
'//1'
我对python正则表达式有什么误解

更多信息:

>>> re.search(r"//\s*.*", "//\n  test").group()
'//\n  test'
>>> re.search(r"//\s*.*", "//1\n  test").group()
'//1'

最后一段代码没有MUTLILINE和DOTALL?我在这里误解了什么?*不应该匹配换行符,也绝对不应该超过换行符,对吗?

\s
可以匹配换行符,当您使用
re.DOTALL
标志时
也可以匹配换行符

在第一种情况下,您的
\s*
是贪婪的,因此由于字符串中
/
后面的第一个字符是换行符,它们将由
\s*
匹配,然后
*?
将匹配最后一行,以便
$
可以在字符串的最末端匹配

在第二种情况下,
\s*
无法匹配,因为
/
之后有
1
,而
*?
将只匹配到第一个换行符之前,因为它是惰性的


如果要匹配除换行符以外的所有空格,可以使用
[\t]
代替
\s
。实际上,对于您的示例,如果您只使用正则表达式
/.*?$
并启用
re.MULTILINE
标志(
re.DOTALL
也可以包括在内,在这种情况下不会有什么不同)。

这是没有MUTLILINE和DOTALL的?-不是根据你的密码…谢谢!我甚至没有想到第一个!