Python:在每一行的开头匹配并替换所有空格

时间:2018-06-24 01:48:52

标签: python regex

我需要这样转换文本:

' 1 white space before string'
'  2 white spaces before string'
'   3 white spaces before string'

进入:

' 1 white space before string'
'  2 white spaces before string'
'   3 white spaces before string'

单词之间和行尾的空格不应匹配,而应仅在开头。另外,无需匹配选项卡。寻求帮助

2 个答案:

答案 0 :(得分:3)

re.sub与执行实际替换的回调一起使用:

import re

list_of_strings = [...]

p = re.compile('^ +')
for i, l in enumerate(list_of_strings): 
    list_of_strings[i] = p.sub(lambda x: x.group().replace(' ', ' '), l)

print(list_of_strings)
[' 1 white space before string',
 '  2 white spaces before string',
 '   3 white spaces before string'
]

此处使用的模式为'^ +',只要空格位于字符串开头,就会搜索并替换空格。

答案 1 :(得分:2)

如果您知道空格只是前导空格,则可以执行以下操作:

l = ' ' * (len(l) - len(l.lstrip())) + l.lstrip()

虽然不是最有效的。这样会更好一点:

stripped = l.strip()
l = ' ' * (len(l) - len(stripped)) + stripped
print(l)

这是没有re开销的一种实现方法。

例如:

lines = [
    ' 1 white space before string',
    '  2 white spaces before string',
    '   3 white spaces before string',
]

for l in lines:
    stripped = l.strip()
    l = ' ' * (len(l) - len(stripped)) + stripped
    print(l)

输出:

 1 white space before string
  2 white spaces before string
   3 white spaces before string