Regex имеет возможность выполнять условные (if-then-else) операторы. Используя это, мы можем проверить, предшествует ли символу пробел;иначе, мы можем проверить, сопровождается ли это пробелом. В противном случае мы не совпадаем.
(?(?<=^|\s)\p{P}|\p{P}(?=\s|$))
Это регулярное выражение проверяет начало строки или пробела перед символами, которые вы планируете сопоставить, и, если это не удается, проверяетдля набора символов, за которым следует пробел или конец строки. \p{P}
ищет любые знаки препинания. Замените \p{P}
на то, что вы хотели бы захватить.
Демо