一尘不染

带标志的Python re.sub不会替换所有出现的事件

python

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.'

阅读 515

收藏
2020-02-20

共1个答案

一尘不染

看一下的定义re.sub

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

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

使用命名参数:

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

或先编译正则表达式:

re.sub(re.compile('^//', re.MULTILINE), '', s)
2020-02-20