正则表达式:使用 re.sub 删除重复空格会在所有字符后返回逗号



可能有一个简单的解决方法,但我找不到它。我正在尝试删除字符串中的重复空格(实际上是句子(。

这是一句话: 'Kan me     niks voorstellen   bij dat verhaal, want'

这就是我正在使用的代码。当我运行这个时,它返回的句子没有多余的空格,但每个字符后都有一个逗号:

K,a,n,,m,e,n,i,k,s,,v,o,o,r,s,t,e,l,l,e,n,b,i,j,,d,a,t,,v,e,r,h,a,a,l,w,a,n,t

这可能是由于我正在写入 csv 文件吗?感谢您的帮助!

import csv, re
with open('spaties.csv', 'r', newline='') as readFile:
reader = csv.reader(readFile)
with open('spaties2.csv', 'w', newline='') as new_file:
writer = csv.writer(new_file)
for line in reader:
writer.writerow(line)
st = ''.join(line)
print(st)
st = re.sub("ss+", " ", st.strip())
print(st)
writer.writerow(st)

你打电话给re.sub很好,问题出在csv.writer

writerow期望字符串的可迭代对象,因此它迭代 srting 的字符并将每个字符视为不同的列。如果您只想按原样写入文本,请直接写入文件而不要使用csv.writer.

您可能希望对每个元素调用re.sub,如下所示:

for line in reader:
writer.writerow(line)
st = [re.sub("s+", " ", x) for x in line]
writer.writerow(st)

或者您必须在呼叫re.sub后拆分线路:

for line in reader:
writer.writerow(line)
st = ','.join(line)
st = re.sub("s+", " ", st)
# note: if the columns contain "," this might not produce the
# result you want!
writer.writerow(st.split(','))

如果要从字符串中删除所有多余的空格,换行符,制表符等,可以使用:

s = 'Kan me     niks voorstellen   bij dat verhaal, want'
s = " ".join(s.split())
print(s)

输出:

Kan me niks voorstellen bij dat verhaal, want

最新更新