#c_sharp #регулярные_выражения
Согласно документации языка С#: \W - Соответствует любому символу, который не является буквенно-цифровым знаком. Мне казалось логичным предположить, что символ нижнего подчеркивания - "_" попадает под данное определение. Но на практике оказалось, что регулярное выражение - @"\W+" не находит символ нижнего подчеркивания в строке - @"@$^№_\|/*-+=~%{}()[];:,.!?'"""` Объясните пожалуйста, почему регулярное выражение, не находит символ нижнего подчеркивания -"_"?
Ответы
Ответ 1
Под \W попадают все символы, кроме тех, что попадают под \w. В C# под \w попадают буквы (не A-Za-z, а все символы, из определенных категорий Unicode, включая кириллицу), цифры, и спецсимволы из категории Punctuation, Connector. Символ _ входит в категорию Punctuation, Connector (там кроме него еще десяток символов, вроде ﹍ и ⁀). Если проблема только с _ - явно добавьте его в список символов: [\W_]+. Если хотите захватить все Punctuation, Connector - добавляйте весь класс все не-бувкы и не-цифры - добавляйте весь класс: [\W\p{Pc}]+.Ответ 2
И так, нужно вспомнить, что обратное метасимволу \W является \w, который можно записать, как [a-zA-Z0-9_] то есть, символ, который используется в словах. Обычно он включает в себя все буквы, все цифры и знак подчеркивания _, исходя из этого, мы теперь знаем, что подчеркивание входит в группу \w, а метасимвол \W включает в себя все, кроме символов, определяемых метасимволом \w. Поэтому в вашем случае можно записать выражение, как @"[\W_]+"?
Комментариев нет:
Отправить комментарий