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

225
06 ноября 2018, 07:20

Согласно документации языка С#:

\W - Соответствует любому символу, который не является буквенно-цифровым знаком.

Мне казалось логичным предположить, что символ нижнего подчеркивания - "_" попадает под данное определение.

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

Объясните пожалуйста, почему регулярное выражение, не находит символ нижнего подчеркивания -"_"?

Answer 1

Под \W попадают все символы, кроме тех, что попадают под \w.

В C# под \w попадают буквы (не A-Za-z, а все символы, из определенных категорий Unicode, включая кириллицу), цифры, и спецсимволы из категории Punctuation, Connector.

Символ _ входит в категорию Punctuation, Connector (там кроме него еще десяток символов, вроде и ).

Если проблема только с _ - явно добавьте его в список символов: [\W_]+.

Если хотите захватить все Punctuation, Connector - добавляйте весь класс все не-бувкы и не-цифры - добавляйте весь класс: [\W\p{Pc}]+.

Answer 2

И так, нужно вспомнить, что обратное метасимволу \W является \w, который можно записать, как [a-zA-Z0-9_] то есть, символ, который используется в словах.

Обычно он включает в себя все буквы, все цифры и знак подчеркивания _, исходя из этого, мы теперь знаем, что подчеркивание входит в группу \w, а метасимвол \W включает в себя все, кроме символов, определяемых метасимволом \w.

Поэтому в вашем случае можно записать выражение, как @"[\W_]+"?

READ ALSO
wp_get_post_tags не получает id поста

wp_get_post_tags не получает id поста

Не могу понять почему wp_get_post_tags не получает ID поста

223
Почему не работает бот через curl method post?

Почему не работает бот через curl method post?

тренируюсь писать бота, хочу написать бота который будет авторизоваться в Twittercom и показывать ленту новостей

216
Странное поведения php и Mysql

Странное поведения php и Mysql

Мое приложения отправляет запрос на создание публикации на мой api (php and database mysql)В api использую ORM систему RedBeanPhp для запросов в базу данных

190
Файл с определенной кодировкой

Файл с определенной кодировкой

В проекте используется кодировка utf-8, но при создании файла к примеру расширения csv необходимо чтобы создался файл в ansi-1251 кодировкеКак это...

227