如何在Python中使用正则表达式将重复字符压缩为单个字符?

2 投票
2 回答
1345 浏览
提问于 2025-04-16 08:45

我想要把字符串中连续出现的标点符号替换成一个标点符号。比如:

  • "我去了公园...." => "我去了公园."
  • "你是认真的吗??!!???" => "你是认真的吗?!?!"

我想到的第一种方法是:

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

不过,由于这个过程会重复运行,我在想有没有办法用一个正则表达式来实现,这样可以让它运行得更快。你觉得怎么样?

2 个回答

3

这段代码的意思是用来处理文本中的标点符号。具体来说,它会找到连续出现的感叹号、问号或句号,并把它们替换成只保留一个。比如,如果文本中有“!!!”或者“???”,它会把它们变成“!”和“?”。这样可以让文本看起来更整洁。

4

你可以试试:

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

这里用到了 re.escape(),这个函数的作用是确保标点符号被正确处理,不会出错。\1 是一个回溯引用,它指的是括号 () 中的内容,也就是第一个匹配到的标点符号。所以,这段代码的作用是把连续出现的两个或更多相同的标点符号替换成一个。

撰写回答