我希望能够用一次匹配替换字符串中连续出现的标点符号。 例如:
首先想到的是:
for char in string.punctuation:
text = re.sub( "\\" + char + "+", char, text )
然而,由于这将在一个重复的过程中运行,我想知道是否有一种方法可以在单个RE中实现这一点,以使其运行更快。你觉得怎么样?
答案 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)