正则表达式在python中不起作用。删除每行开头的空格

时间:2013-10-22 13:51:52

标签: python regex

我有一个变量文本(在Python中),文本应该打印在一个文件中,它有很多可变长度,在大多数行的开头有额外的空格。我想要做的就是删除这些空格。这是我使用的代码。

text = re.sub(r'(^\s*)',r'',text,re.MULTILINE)

但是只删除了第一行的空白。其他一切都保持不变。谁能告诉我我做错了什么?

非常感谢。

4 个答案:

答案 0 :(得分:4)

re.sub的第四个参数是替换计数,而不是标记。

  

re.sub(pattern,repl,string, count = 0 ,flags = 0)

>>> re.MULTILINE
8
>>> print re.sub(r'(^\s*)', '', '  a\n  b\n', re.MULTILINE)
a
  b    

使用关键字参数flags

>>> print re.sub(r'(^\s*)', '', '  a\n  b\n', flags=re.MULTILINE)
a
b
顺便说一下,你不需要括号:

>>> print re.sub(r'^\s*', '', '  a\n  b\n', flags=re.MULTILINE)
a
b

使用str.lstrip,您不需要正则表达式。

>>> print '\n'.join(map(str.lstrip, '   a\n   b\n'.splitlines()))
a
b

答案 1 :(得分:2)

您可以这样做以避免正则表达式

text = '\n'.join([line.lstrip() for line in text.splitlines()])

这将分成几行,删除前导空格并再次将其合并。只是另一种解决方案。我喜欢尽可能避免正则表达式。但是其他人都爱他们。

答案 2 :(得分:0)

为什么不用lstrip将其写入文件流?

file.write(content.lstrip())

假设您在文本中迭代,逐行编写,几乎不需要任何费用。

答案 3 :(得分:0)

通过避免正则表达式获得的性能提升可能不会超出代码可读性,除非您一直在大文本上执行此操作。否则,使用正则表达式可能只会产生更容易理解的代码:

sample_text = "    lorem ipsum\n" * 10
beginning_whitespace = re.compile(r'^\s+', flags=re.MULTILINE)
new_text = re.sub(beginning_whitespace, '', sample_text)

比那些神秘的其他选择:

new_text = '\n'.join([line.lstrip() for line in sample_text.split('\n')])
new_text = '\n'.join(map(str.lstrip, sample_text.splitlines()))