gpt4 book ai didi

python - 使用正则表达式进行标点符号校正

转载 作者:行者123 更新时间:2023-12-01 04:09:33 35 4
gpt4 key购买 nike

我想制作一个正则表达式来修复各种标点符号语法错误。只有一些简单的要求:

  • 标点符号应模仿在单词后面(无空格)
  • 标点符号后应始终有一个空格
  • 重复的标点符号之间不应有空格

到目前为止我得到了这个:

(?:\s*)([?!.,]+)(?:\s*) 

替换为\1。这修复了第 1 点和第 2 点,但也在标点符号之间添加了空格。

我尝试运行另一个正则表达式来修复第 3 点:

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

但这也会删除标点符号本身,即使它们不属于任何捕获组?

行为示例:

输入:“什么!这是.this,gdjs gf fg fddsf ......”

期望的输出:“什么!是。这个这个,gdjs gf fg fddsf...”

最佳答案

您需要将多个标点符号与空格匹配,然后删除 lambda 中标点符号之间的空格:

import re

fix_spaces = re.compile(r'\s*([?!.,]+(?:\s+[?!.,]+)*)\s*')
text = "what! is .this this,gdjs gf fg fddsf . . ."
text = fix_spaces.sub(lambda x: "{} ".format(x.group(1).replace(" ", "")), text)
print(text.strip())

参见IDEONE demo .

您也可以在 lambda 中使用正则表达式来删除空格:

re.sub(r"\s+", "", x.group(1))

正则表达式匹配:

  • \s* - 前导空格(零个或多个)
  • ([?!.,]+(?:\s+[?!.,]+)*) - 第 1 组匹配 [?!., ] 集合,后跟零组或多组一个或多个空格,后跟 [?!.,] 集合中的一个或多个标点符号
  • \s* - 零个或多个尾随空格。

关于python - 使用正则表达式进行标点符号校正,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35140943/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com