2016-11-19 10 views
-1

にインスタンスを1つだけ残して重複したシンボルを削除する私は、この文字列のような入力を取る機能が必要どのようにC#ではC#の

利用可能Dersions !!!!!!!!!、!!!! !!、!!!!!!!!!!!!、!!!!!!!!! AAは

が出力として利用できるこの

Dersions!、AAのような文字列を返しますehaoているように、この重複を削除する方法

著作権tditionsの外にehaoですそれぞれの句読記号は1つだけ残っていますか? これを達成する必要があります正規表現、いいえ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; 
    } 

ような何かをしようと、このようなマークの後続番号と一致し、単一のマークで、そのような各試合を置き換える正規表現をマーク。

パフォーマンスはあまり高くなく、効率的ではありませんが、そのトリックはありません。

0

すべての句読点のためにこの文句を言わない仕事と、それは最後のマークがあるものは何でもつかむだろう、

(\!|(,)+)+

ここでそれを参照してください - https://regex101.com/r/H4qr1i/2

1

あなたは、各punctutation \p{P}をキャプチャして、を使用することによって確認することができますlookbehindの前にキャプチャされた任意の量の\p{P}を追加した場合は、もしそうならストリップ。それは各種類の最初のままになります。

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

See demo at regex storm(空の文字列に置き換えます)。