为什么re.sub没有用空字符串替换字符串

时间:2015-08-19 12:41:41

标签: python regex string

我无法理解pythons re.sub行为。我想用什么都不替换整个多行字符串。我想要一个空字符串:

#!/usr/bin/python

import re


if __name__ == "__main__":
    data = """hello
world 
good 
day
"""

    textarea = re.sub( '.*', '', data)
    print "processed '%s'" % textarea

    textarea = re.sub( '.*', '', data, flags=re.MULTILINE)
    print "processed '%s'" % textarea

以上代码,至少在我的机器上没有输出以下内容:

processed ''

这适用于两种情况,多线/非多线。相反,单引号分布在多行中。为什么会这样?

我真正想做的是从多行字符串中删除空行(只包含零个或多个空格的行),我相信上面的例子就是问题。

感谢。

解答:

正如其他人指出的那样。 MULTILINE让我很困惑。为了回答原始问题,而不仅仅是我的愿望,点不匹配换行符,因此除了原始字符串中的换行符之外,所有内容都被替换为空字符串。

通过将re.DOTALL标志添加到上面的示例中,给出了空字符串的预期行为。

1 个答案:

答案 0 :(得分:2)

  

我真正想要做的是从多行字符串中删除空行(仅包含零个或多个空格的行)。

re.sub(r'(?m)^[ \t]*$\n?', '', s)

re.sub(r'(?m)^\s*$\n?', '', s)

DEMO