【Python】regex对英文生成文本中的字符串处理

该博客介绍了如何使用正则表达式来处理文本中的连续重复字符、单词和句子,包括去除多余的空格、保留重复项的第一个实例、处理长单词以及调整句子格式。此外,还提供了一个在线正则表达式检查平台供读者验证表达式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要针对连续重复字符串 (repetition)
比如:
“I love my cat cat cat cat cat”
“I love you. I love you. I love you. I love you. ”

还有其他一些后处理。

def replace_regex(x, remove=None): 
	# 小写独立i 转 I
    x = re.sub(r"\bi\b","I",x) # i -> I 
    # 连续重复字符(原文中以空格分隔 如 "p p p p p","* * * * *")只保留第一个
    x = re.sub(r"(\b\w|\W)(\s+\1){1,}", "\g<1>", x)
    # 去除可能产生的多余连续空格
    x = re.sub(r"\s{1,}"," ", x) 
    
    # 连续重复单词(原文中以空格分隔 如 "cat cat cat cat cat")只保留第一个
    x = re.sub(r'\b(\w+)(\s+\1){1,}',"\g<1>",x) # repeating words
    x = re.sub(r"\s{1,}"," ", x) # delete redundant space

    # 连续重复句子(这里需要不断去重,假设一句话重复了n次,需要替换log(n)次
    tmp = re.sub(r'(.+[^\s])(\s+\1){1,}',"\g<1>",x)
    while (len(x)>len(tmp)):
        x = tmp
        tmp = re.sub(r'\b(.+[^\s])(\s+\1){1,}',"\g<1>",x)
    
    # delete too long words
    x = re.sub(r"(\w){20,}","",x) # 一个单词超过20个字符可以去掉
    x = x.replace('_',"") # 一些可能出现的不要的字符
    x = re.sub(r"\$\s(?=[0-9])",'\$',x)  # $ 999 -> $999
    x = re.sub(r"(?<=[a-zA-Z])\s(\'|’)\s(?=[a-zA-Z])", "'", x) # 去掉单引号两侧的空格 -》I'm ,he's 
    x = re.sub(r"(?<=[0-9])\s\.\s(?=[0-9])",".", x) # 小数点两侧的空格 9 . 1-> 9.1
    x = re.sub(r"(?<=\w)\s([\.\?\!,,\:\:])\s", "\g<1> ", x) #句子末标点符号与前一句之间的空格去掉: end of sentence . New sentence-> end of sentence. New sentence
    
    # 每个句首字母大写
    x = re.sub(r"(?:^|[\.\!\?]\s?\"?\s?)([a-z])",lambda m:m.group(0).upper(),x)
    return x

附上检查正则表达式的在线平台:
https://regex101.com/r/1paXsy/1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值