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.'
Moe.. 117
看看定义re.sub
:
re.sub(pattern, repl, string[, count, flags])
第四个参数是计数,你使用re.MULTILINE
(它是8)作为计数,而不是标志.
如果你想使用标志,你必须编译你的正则表达式.
re.sub('^//', '', s, flags=re.MULTILINE)
re.sub
在Python 2.7中添加了一个参数,因此完整定义现在是:
re.sub(re.compile('^//', re.MULTILINE), '', s)
意思就是:
re.sub(pattern, repl, string[, count, flags])
作品.
看看定义re.sub
:
re.sub(pattern, repl, string[, count, flags])
第四个参数是计数,你使用re.MULTILINE
(它是8)作为计数,而不是标志.
如果你想使用标志,你必须编译你的正则表达式.
re.sub('^//', '', s, flags=re.MULTILINE)
re.sub
在Python 2.7中添加了一个参数,因此完整定义现在是:
re.sub(re.compile('^//', re.MULTILINE), '', s)
意思就是:
re.sub(pattern, repl, string[, count, flags])
作品.
re.sub('(?m)^//', '', s)
完整的定义re.sub
是:
re.sub(pattern, repl, string[, count, flags])
这意味着如果你告诉Python参数是什么,那么你可以传递flags
而不传递count
:
re.sub('^//', '', s, flags=re.MULTILINE)
或者,更简洁地说:
re.sub('^//', '', s, flags=re.M)