繁体   English   中英

python regex re.sub在逗号前删除空格

[英]python regex re.sub delete space before comma

我正在尝试编写一个简洁的文本程序,并为此目的制作了一系列re.subs。 这是我要清理的凌乱字符串:

“当我尝试这样做时,逗号不会移到左边,而句号也会移到左边。理想情况下,新句子的第一个字母大写。”

import csv, re
with open('spaties.csv', 'r', newline='') as readFile:
reader = csv.reader(readFile)

    with open('spaties3.csv', 'w', newline='') as new_file:
    writer = csv.writer(new_file)

    for line in reader:
        writer.writerow(line)

        #delete duplicate spaces
        ver1 = [re.sub("\s+", " ", x) for x in line]
        writer.writerow(ver1)

        #insert space after .
        ver2 = [re.sub(r'(?<=[.])(?=[^\s])', r' ', x) for x in ver1]
        writer.writerow(ver2)

        #sentence start with uppercase
        ver3 = [re.sub(r'(\.\s[a-z])', lambda pat: pat.group(1).upper(), x) for x in ver2]
        writer.writerow(ver3)

        ver4 = [re.sub("ipv", "i.p.v.", x) for x in ver3]
        writer.writerow(ver4)

        #remove space before .
        ver5 = [re.sub(r'\s([?.!"](?:\s|$))', r'\1', x) for x in ver4]
        writer.writerow(ver5)

        #first letter uppercase
        ver6 = [re.sub(r'(^[a-z])', lambda pat: pat.group(1).upper(), x) for x in ver5]
        writer.writerow(ver6)

        #insert space after ,
        ver7 = [re.sub(r'(?<=[,])(?=[^\s])', r' ', x) for x in ver6]
        writer.writerow(ver7)

        #remove space before ,
        ver8 = [re.sub(r'\s([?,!"](?:\s|$))', r'\1', x) for x in ver7]
        writer.writerow(ver8)

    new_file.close()

这是我得到的最后一个输出:

``当我尝试这样做时,逗号不会移到左侧,而句号会移到左侧。 同样,新句子的第一个字母理想地大写。

因此它确实正确移动了重复的空格,将句子的首字母大写,但是:

  • 它没有在逗号后插入空格(ver7)
  • 也没有删除逗号前的空格(ver8)。
  • 此外,它已大写。

逗号问题使我感到困惑,因为版本7和8与版本2和5完全相同。

提前致谢!

我认为您太过复杂了。 您可以删除句号,逗号,问号或感叹号之前的所有空格,并使用此正则表达式在其后插入一个空格:

\s*([.,!?])\s*

它只是寻找.,!? 在左右两侧都用一定数量(可能为0)的空格包围,然后将其替换为\\1 (后跟一个空格的\\1 ),从而删除之前的所有空格,然后使用单个空格替换所有空格。

regex101上的演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM