Ответы Паксдиабло и Танаскиуса правильно объясняют, почему ваше регулярное выражение не компилируется.
Но:
Вы должны быть осторожны с регулярным выражением, даже после выхода за скобки: \b
соответствует только в границах слова (слово, составленное из символов сочетания клавиш \w
- буквы, цифры, и подчеркивание), не после знаков препинания, как в скобках. В вашем случае регулярное выражение не будет совпадать в строке типа foo Serial) bar
. будет совпадать с foo Serial)bar
, но только потому, что \b
соответствует до bar
. Аналогично, он не будет соответствовать строке Serial)
.
Таким образом, простое окружение строки с \b
s не всегда будет делать то, что вы, похоже, ожидаете.
Редактировать: Если, согласно вашему комментарию ниже, в следующем списке ...
foo Serial) bar
foo (Serial) bar
foo Serial). bar
foo Serial))))))
foo Serial)
... должны совпадать только первый и пятый, я предполагаю, что правило должно соответствовать целому слову, только если ему предшествует / сопровождается пробелом или началом / концом строки.
В этом случае используйте
If Regex.IsMatch(Output, "(?<=^|\s)" & Regex.Escape("Serial)") & "(?=\s|$)") Then
Однако теперь это больше не будет соответствовать foo
в This is foo.
или He said "foo"
. Если вы хотите разрешить это, используйте
If Regex.IsMatch(Output, "(?<=^|\b|\s)" & Regex.Escape("Serial)") & "(?=\s|\b|$)") Then
... но теперь это будет соответствовать второму примеру. Тщательно выбирайте свое оружие:)
(Объяснение: (?<=^|\b|\s)
- это положительное утверждение с задним числом, которое соответствует, если возможно сопоставить начало строки, границу слова или символ пробела непосредственно перед текущей позицией, не добавляя ничего к результату сопоставления. . (?=\s|\b|$)
- его ожидающий аналог.)