用python中的一个字符替换任何特殊字符的多次出现

用python中的一个字符替换任何特殊字符的多次出现,python,regex,replace,special-characters,Python,Regex,Replace,Special Characters,我有一个字符串,比如: string = "happy.....!!!" 我想要像这样的输出: new_string = "happy.!" 我知道如何替换任何特殊字符的多次出现。可按如下方式进行: line = re.sub('\.+', '.', line) 但是我想替换所有特殊字符,比如“,./\,等等。 一种方法是为每个特殊的字符编写它。 但是想知道是否有一种简单的方法可以将所有特殊字符写入一行。您可以使用\W匹配任何非单词字符: line = re.sub(r'\W+', '.'

我有一个字符串,比如:

string = "happy.....!!!"
我想要像这样的输出:

new_string = "happy.!"
我知道如何替换任何特殊字符的多次出现。可按如下方式进行:

line = re.sub('\.+', '.', line)
但是我想替换所有特殊字符,比如“,./\,等等。 一种方法是为每个特殊的字符编写它。
但是想知道是否有一种简单的方法可以将所有特殊字符写入一行。

您可以使用
\W
匹配任何非单词字符:

line = re.sub(r'\W+', '.', line)

如果要替换为相同的特殊字符,请使用:

line = re.sub(r'(\W)(?=\1)', '', line)
我想你是说这个

line = re.sub(r'(\W)\1+', r'\1', line)

否,它将用“.”替换所有特殊字符。我只想用该特殊字符替换多次出现的字符。只是像问题编辑之前一样编辑了我的答案,不清楚您的预期输出是什么。太棒了。它正在工作。请您解释一下。当然。
(\W)
将匹配任何非单词字符并将其放入捕获的组中#1。
(?=\1)
是一种前瞻性方法,可确保同一组中至少有一个重复。替换为空字符串,因此将删除所有非单词字符的重复。