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