68

Python 文档说:

re.MULTILINE:指定时,模式字符 '^' 匹配字符串的开头和每行的开头(紧跟在每个换行符之后)...默认情况下,'^' 仅匹配字符串的开头...

那么当我得到以下意外结果时会发生什么?

>>> import re
>>> s = """// The quick brown fox.
... // Jumped over the lazy dog."""
>>> re.sub('^//', '', s, re.MULTILINE)
' The quick brown fox.\n// Jumped over the lazy dog.'
4

3 回答 3

141

看看 的定义re.sub

re.sub(pattern, repl, string[, count, flags])

第 4 个参数是计数,您使用re.MULTILINE(即 8)作为计数,而不是作为标志。

要么使用命名参数:

re.sub('^//', '', s, flags=re.MULTILINE)

或者先编译正则表达式:

re.sub(re.compile('^//', re.MULTILINE), '', s)
于 2008-09-03T21:08:02.767 回答
12
re.sub('(?m)^//', '', s)
于 2010-03-25T16:10:45.187 回答
8

的完整定义re.sub是:

re.sub(pattern, repl, string[, count, flags])

这意味着如果你告诉 Python 参数是什么,那么你可以flags不通过就通过count

re.sub('^//', '', s, flags=re.MULTILINE)

或者,更简洁地说:

re.sub('^//', '', s, flags=re.M)
于 2011-08-30T18:33:24.740 回答