2016-11-19 73 views
-1

在C#中,我需要一個函數,輸入這樣的串如何刪除重複的符號,只留下一個實例,在C#

可用Dersions !!!!!!!!!,!!!! !!,!!!!!!!!!!!!,!!!!!!!!! AA是阿豪

將返回作爲輸出這樣

可用Dersions串!AA是阿豪的出版權tditions的

如何消除這種重複使每個只有一個標點符號? 我需要與正則表達式,沒有linq。

回答

0

我會嘗試這樣的事情

public String[] punctuationMarks = new String[] {"!", "?" }; 

    public String NormalizePunctuation(String text) { 
     foreach (String punctuationMark in punctuationMarks) { 
      text = Regex.Replace(text, punctuationMark + "+", punctuationMark); 
     } 

     return text; 
    } 

它建立每個標點符號符合此類商標的任何後續數量和替換每個這樣的匹配與單一標記的正則表達式。

不是非常高效或高效,但它有訣竅。

1

您可以捕捉每個punctutation \p{P}和使用的檢查lookbehind如果它前面有任何數量的\p{P}加上相同的捕獲。如果這樣脫銷。它會留下每一種的第一個。

(\p{P})(?<=\1\p{P}+) 

See demo at regex storm(用空字符串替換)。

相關問題