Регулярное выражение после объединения с baseRex
:
[!,.?": ]?C[!,.?": ]?
Обратите внимание, что [!,.?": ]?
может соответствовать 0 или 1 символу. В Computer
оба подшаблона [!,.?": ]?
соответствуют 0 символам, а C
соответствует C
, что приводит к совпадению всего регулярного выражения.
Предположительно, вы добавили туда ?
, чтобы он работал на начало и конец строки, где нет символов для сопоставления. Однако вместо этого вы должны использовать ^
и $
для начала и конца. Ваше полное регулярное выражение должно быть:
(?:[!,.?": ]|^)C(?:[!,.?": ]|$)
Вы также можете заменить класс персонажа на \W
, что означает [^0-9a-zA-Z_]
.
На самом деле вам не нужно делать все это! Существует полезное средство сравнения ширины 0, называемое «граница слова» \b
, которое, похоже, именно то, что вам нужно. Ваше базовое регулярное выражение может быть просто:
\b
Оно соответствует только границе между \w
и \W
или между \W
и \w
.