【发布时间】:2019-01-28 11:42:29
【问题描述】:
我正在尝试制作一个小文本清洁程序,并且为此目标制作了一系列 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 版完全相同。
提前致谢!
【问题讨论】: