我无法理解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标志添加到上面的示例中,给出了空字符串的预期行为。
答案 0 :(得分:2)
我真正想要做的是从多行字符串中删除空行(仅包含零个或多个空格的行)。
re.sub(r'(?m)^[ \t]*$\n?', '', s)
或
re.sub(r'(?m)^\s*$\n?', '', s)