如何用Python正则re.sub()拆分PDF转文本中连写的句子?
解决re.sub()拆分连写句子时的转义错误问题
错误原因
你在re.sub()的替换字符串里使用了\w、\s这类正则转义序列,但替换参数是普通字符串,不是正则模式,Python会将\w识别为无效的转义字符,因此抛出"bad escape /w"错误。
正确实现方法
你需要通过正则分组捕获或断言来保留原字符,同时添加空格拆分句子,以下是两种可行方案:
方案1:分组捕获替换
利用正则分组捕获句号前后的单词字符,在替换时引用分组内容并插入空格:
import re text = "... are attended <strong>to.In</strong> fact ..." fixed_text = re.sub(r'(\w)\.(\w)', r'\1. \2', text) print(fixed_text) # 输出:... are attended <strong>to. In</strong> fact ...
(\w):捕获句号前的单个单词字符(\w):捕获句号后的单个单词字符r'\1. \2':引用两个分组的内容,中间插入空格和句号
方案2:正向/反向断言替换
使用零宽断言定位需要修改的句号,无需捕获原字符,直接替换为带空格的句号:
import re text = "... are attended <strong>to.In</strong> fact ..." fixed_text = re.sub(r'(?<=\w)\.(?=\w)', r'. ', text) print(fixed_text) # 输出:... are attended <strong>to. In</strong> fact ...
(?<=\w):反向断言,确保句号前是单词字符(?=\w):正向断言,确保句号后是单词字符r'. ':将匹配到的句号替换为带空格的句号
补充说明
之前用re.findall('\w+?\.\w+')能匹配是因为第一个参数是正则模式,支持转义序列,但替换参数不支持,必须用分组引用或直接写目标字符串。
内容的提问来源于stack exchange,提问作者user20309717
相关产品推荐
相关产品推荐

