Regex, заменяющий не-слова символы в строках, игнорируя определенные символы - PullRequest
0 голосов
/ 08 октября 2011

В VB.net у меня есть следующая строка, которая удаляет все не алфавитно-цифровые символы из строки:

return Regex.Replace(build, "[\W]", "")

Теперь мне нужно расширить это, чтобы удалить не алфавитно-цифровые символы, которые не являются [] или _.

Я изменил строку на:

return Regex.Replace(build, "[\W\[\]_]", "")

Однако я уверен, что это говорит

заменить не словом или [или] или _

как отменить тесты для символов [] и _, чтобы в нем было указано

replace non-word and not [ and not ] and not _

Некоторые примеры:

"[Foo Bar_123456]" => "[FooBar_123456]"
"[Foo Bar_123-456*]" => "[FooBar_123456]"

(при необходимости может быть предоставлено больше)

Ответы [ 2 ]

3 голосов
/ 08 октября 2011

Попробуйте это регулярное выражение:

[^\w\[\]]

В нем указано совпадение (а затем замена) всего, кроме буквенно-цифровых (включая "_"), "[" и "]"

1 голос
/ 08 октября 2011

Вы можете использовать вычитание набора символов :

[\W-[_\[\]]]

Т.е.\W с удаленными _, [ и ] (последние два нуждаются в экранировании, поскольку они являются метасимволами в наборе символов).Строковая строка @"..." исключает необходимость экранирования каждой обратной косой черты из C #:

var re = new Regex(@"[\W-[_\[\]]]");
...