Это RegEx:
(?<!\w)\W+|\W+(?!\w)
Соответствует любому из двух альтернативных RegEx. (1|2)
- Любой специальный символ (не символ слова:
\W
), которому не предшествует символ слова (\w
) - Любой специальный символ, за которым не следует символом слова.
Это работает, потому что, если любой из них совпадает, специальный символ не должен быть в слове
"предшествует": положительный взгляд позади. (?<=y)X
: X предшествует y
"не предшествует": отрицательный взгляд позади. (?<!y)X
: X не предшествует y
«сопровождается»: позитивный взгляд. X(?=y)
: за X следует y
"не следует": отрицательный взгляд. X(?!y)
: за X не следует y.
Вы должны заменить \W
набором специальных символов (соответственно экранированных)
Одна вещь, которую следует отметить с этим решением, - это то, что не зависит от наличия пробела.