如何在Python中使用RE将重复字符压缩为单个字符?
我希望能够将字符串中任何连续出现的标点字符替换为单个出现的标点字符。 例如:如何在Python中使用RE将重复字符压缩为单个字符?,python,regex,compression,repeat,Python,Regex,Compression,Repeat,我希望能够将字符串中任何连续出现的标点字符替换为单个出现的标点字符。 例如: “我去公园了……”我去了 去公园。” “你是认真的吗?”=>“是吗?” 真的?!” 首先想到的是: for char in string.punctuation: text = re.sub( "\\" + char + "+", char, text ) 然而,由于这将在一个重复的过程中运行,我想知道是否有一种方法可以在单个RE中实现这一点,从而使其运行得更快。你觉得怎么样?re.sub(r'([!?)
- “我去公园了……”我去了 去公园。”
- “你是认真的吗?”=>“是吗?” 真的?!”
for char in string.punctuation:
text = re.sub( "\\" + char + "+", char, text )
然而,由于这将在一个重复的过程中运行,我想知道是否有一种方法可以在单个RE中实现这一点,从而使其运行得更快。你觉得怎么样?re.sub(r'([!?)\1+,r'\1',text)
你可以试试:
text = re.sub(r"([" + re.escape(string.punctuation) + r"])\1+", r"\1", text)
这将使用
re.escape()
确保标点符号在必要时正确转义。\1
反向引用指括号内的部分()
,这是匹配的第一个标点字符。因此,这将用相同的单个字符替换两个或多个重复标点符号的实例。谢谢,这两个都是很好的快速答案。但我只能接受一个,所以我选择了一个纠正我逃避标点符号字符串的方法的人