#c# #regex #string #text #punctuation
#c# #регулярное выражение #строка #текст #пунктуация
Вопрос:
Если мне нужно разрешить только первый знак препинания в строке с разной последовательностью знаков препинания между словами, например, если строка:
string str = "hello,.,.,.world.,.?,.";
в результате я хочу получить это:
hello, world.
Было бы хорошо знать, как передавать такую строку после вставки и как избежать написания более одного знака и одного пробела между словами в строке непосредственно в текстовом поле.
Ответ №1:
Вы можете попробовать это: (?<=[,.])[,.?]
.
Посмотрите, как это работает здесь: https://regex101.com/r/di5Ebw/1 .
Если вам нужно иметь список специальных символов, которые вы хотите удалить, мы можем настроить [,.]
!
(Итак, в примере, который я привожу вам, совпадение относится к символам, которые вы хотите удалить: просто замените это совпадение пустой строкой — как вы можете видеть на панели ЗАМЕНЫ внизу)
[РЕДАКТИРОВАТЬ] Расширьте случаи совпадения.
Если вы не хотите беспокоиться, пусть это сделает это за вас: (?<=W)(?<! )W
Посмотрите, как это работает здесь: https://regex101.com/r/di5Ebw/2
Комментарии:
1. да, точно, если я хочу разобраться с пунктуацией, разделенной пробелом между словами, этот способ полезен
Ответ №2:
Регулярные выражения .Net имеют класс пунктуации, поэтому простым способом достижения требуемого результата является поиск строки (wp{P})p{P}
и замена на $1
.
Для регулярного выражения, которое обрабатывает ровно несколько символов препинания, используемых в вопросе, можно использовать регулярное выражение (w[.,?])[.,?]
.
(Обратите внимание, выше показаны регулярные выражения. Их строками C # являются "(\w\p{P})\p{P} "
и "(\w[.,?])[.,?] "
.)
Объяснение. Это ищет символ слова ( w
), за которым следует один знак препинания, и фиксирует эти два символа. Любые непосредственно следующие символы препинания сопоставляются p{P}
. Все совпадение заменяется захватом.
p{name}
Конструкция определяется здесь как «Соответствует любому отдельному символу в общей категории Unicode или именованному блоку, указанному по имени «..
p{P}
Категория определяется здесь как «Все знаки препинания». Существует также несколько подкатегорий знаков препинания, но, возможно, лучше всего взглянуть на Unicode, чтобы понять их.
Комментарии:
1. этот способ также полезен, но в моем случае я должен разобраться с пунктуацией, разделенной пробелом между словами