2016-11-19 13 views
-1

В C# Мне нужна функция, которая принимает входной сигнал, как эту строкуКак удалить повторяющиеся символы оставив только один экземпляр в C#

доступны Dersions !!!!!!!!!, !!!! !!, !!!!!!!!!!!!, !!!!!!!!! аа ehao

вернется, как вывести строку, как этого

доступного Dersions !, аа ehao из авторского tditions

Как удалить эти дубликаты, так что остается только одна пунктуация? Мне нужно добиться этого с помощью regex, no 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 (заменить пустой строкой).