Python regex re.sub 删除逗号前的空格



我正在尝试制作一个小文本干净的程序,并且我已经为此目标制作了一系列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(之前的空格。
  • 此外,它还将 Whereas.

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

提前感谢!

我认为你把事情复杂化了。您可以删除句号、逗号、问号或感叹号之前的所有空格,并在它们后面插入一个正则表达式:

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

它只是在两侧查找被一定数量(可能是 0(空格包围的.,!?之一,然后将其替换为1(1后跟一个空格(,从而删除之前的任何空格并用单个空格替换之后的任何空格。

在正则表达式101演示

最新更新