我需要这样转换文本:
' 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'
单词之间和行尾的空格不应匹配,而应仅在开头。另外,无需匹配选项卡。寻求帮助
答案 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