Страницы

Поиск по вопросам

пятница, 12 октября 2018 г.

Регулярное выражение \W+ не находит символ “_” в строке

Согласно документации языка С#
\W - Соответствует любому символу, который не является буквенно-цифровым знаком.
Мне казалось логичным предположить, что символ нижнего подчеркивания - "_" попадает под данное определение.
Но на практике оказалось, что регулярное выражение - @"\W+" не находит символ нижнего подчеркивания в строке - @"@$^&#№_\|/*-+=~%{}()[];:,.!?'"""`
Объясните пожалуйста, почему регулярное выражение, не находит символ нижнего подчеркивания -"_"?


Ответ

Под \W попадают все символы, кроме тех, что попадают под \w
В C# под \w попадают буквы (не A-Za-z, а все символы, из определенных категорий Unicode, включая кириллицу), цифры, и спецсимволы из категории Punctuation, Connector.
Символ _ входит в категорию Punctuation, Connector (там кроме него еще десяток символов, вроде ﹍ и ⁀).
Если проблема только с _ - явно добавьте его в список символов: [\W_]+.
Если хотите захватить все Punctuation, Connector - добавляйте весь класс все не-бувкы и не-цифры - добавляйте весь класс: [\W\p{Pc}]+

Комментариев нет:

Отправить комментарий