[英]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()
这是我得到的最后一个输出:
``当我尝试这样做时,逗号不会移到左侧,而句号会移到左侧。 同样,新句子的第一个字母理想地大写。
因此它确实正确移动了重复的空格,将句子的首字母大写,但是:
逗号问题使我感到困惑,因为版本7和8与版本2和5完全相同。
提前致谢!
我认为您太过复杂了。 您可以删除句号,逗号,问号或感叹号之前的所有空格,并使用此正则表达式在其后插入一个空格:
\s*([.,!?])\s*
它只是寻找.,!?
在左右两侧都用一定数量(可能为0)的空格包围,然后将其替换为\\1
(后跟一个空格的\\1
),从而删除之前的所有空格,然后使用单个空格替换所有空格。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.