2010-12-19 62 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)

相關問題