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

时间:2018-08-21 07:47:19

标签: python regex

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

这句话是: ``想要我让我尼克斯·沃斯特尔滕(Bij dat verhaal)

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

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("\s\s+", " ", st.strip())
            print(st)
            writer.writerow(st)

2 个答案:

答案 0 :(得分:1)

您对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(','))

答案 1 :(得分:0)

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

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

print(s)

输出:

Kan me niks voorstellen bij dat verhaal, want