我有一个变量文本(在Python中),文本应该打印在一个文件中,它有很多可变长度,在大多数行的开头有额外的空格。我想要做的就是删除这些空格。这是我使用的代码。
text = re.sub(r'(^\s*)',r'',text,re.MULTILINE)
但是只删除了第一行的空白。其他一切都保持不变。谁能告诉我我做错了什么?
非常感谢。
答案 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)
答案 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()))