2010-12-19 26 views
2

我希望能够用单个匹配项来替换字符串中连续出现的标点符号。 例如:如何使用Python中的RE将重复字符压缩为单个字符?

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

浮现在脑海的第一件事是:

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

然而,因为这是要在一个重复的过程运行,我想知道是否有一种方法在一个实现这一目标RE,为了让它跑得更快。你怎么看?

+0

感谢家伙们都是非常快速的答案。我只能接受一个,所以我选择了那个纠正我逃离标点符号字符串的方法 – Alexandros 2010-12-19 21:37:59

回答

4

你可以尝试:

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

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

3

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

相关问题