繁体   English   中英

如何在Python中使用RE将重复字符压缩为单个字符?

[英]How can I compress repetitive characters to a single character using RE in Python?

我希望能够用单次出现替换字符串中所有连续出现的标点符号。 例如:

  • “我去了公园……。” =>“我去了公园。”
  • “你是认真的吗??!!???!” =>“您是认真的吗?!?!”

我想到的第一件事是:

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

但是,由于这将在重复的过程中运行,我想知道是否有办法在单个RE中实现此目的,以使其运行更快。 你怎么看?

您可以尝试:

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

这使用re.escape()来确保标点符号可以根据需要正确地转义。 \\1引用引用括号()的部分,这是匹配的第一个标点符号。 因此,这会将两个或多个重复标点字符的实例替换为同一单个字符。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM