Вы можете добавить \w
к предпросмотру:
\w+(?![\w@:])
Кроме того, вы можете рассмотреть возможность добавления левой границы, чтобы избежать совпадения слов внутри несловесных непробельных фрагментов текста:
^\w+(?![\w@:])
Или
(?<!\S)\w+(?![\w@:])
^
будет соответствовать слову в начале строки, а (?<!S)
будет соответствовать только в том случае, если перед словом стоит пробел или начало строки.
См. Демонстрационную версию regex .
Почему бы не (?<!\S)\w+(?!\S)
, границы пробелов ? Поскольку, поскольку вы создаете лексер, вам, скорее всего, придется иметь дело с предложениями на естественном языке, где за словами, вероятно, будут следовать знаки препинания, а отрицательный прогноз (?!\S)
сделает совпадение \w+
только тогда, когда за ним будет пробел илив конце строки.