如何在Python中使用RE将重复字符压缩为单个字符?

时间:2010-12-19 21:18:05

标签: python regex compression repeat

我希望能够用一次匹配替换字符串中连续出现的标点符号。 例如:

  • “我去了公园....”=> “我去了 去公园。“
  • “你认真吗?? !! ???!” => “你是 严重吗?!?!“

首先想到的是:

for char in string.punctuation:
  text = re.sub( "\\" + char + "+",  char,  text )

然而,由于这将在一个重复的过程中运行,我想知道是否有一种方法可以在单个RE中实现这一点,以使其运行更快。你觉得怎么样?

2 个答案:

答案 0 :(得分:4)

你可以尝试:

text = re.sub(r"([" + re.escape(string.punctuation) + r"])\1+", r"\1", text)

这使用re.escape()来确保标点符号在必要时被正确转义。 \1反向引用是指括号()中的部分,它是匹配的第一个标点字符。因此,这将使用相同的单个字符替换两个或多个重复标点符号的实例。

答案 1 :(得分:3)

re.sub(r'([!?.])\1+', r'\1', text)