Найти символы набора с пробелом в начале ИЛИ - PullRequest
1 голос
/ 23 октября 2019

Я хочу написать регулярное выражение, совпадающее с набором символов, за которыми следует пробел или другой символ пробела или другого пробела

Пока у меня есть ((?<=[\s\S])|(?=[\s\S]))[^\s\p{L}\p{N}]+

Однако в демонстрационной версии нижеэто совпадающие символы без пробелов по обеим сторонам.

Любой совет будет очень признателен

Демо

В этом примере проблема gskinner.com, и только запятая должна совпадать. Однако полный стоп выделен текущим регулярным выражением

https://regexr.com/4ndul

Ответы [ 2 ]

2 голосов
/ 23 октября 2019

Вы можете использовать это регулярное выражение для этого с чередованием и осмотрами:

(?<=\s)[^\s\p{L}\p{N}]+|[^\s\p{L}\p{N}]+(?=\s)

Демонстрация RegEx

Подробности RegEx:

  • (?<=\s)[^\s\p{L}\p{N}]+: сопоставить несловесный непробельный символ, которому предшествует пробел
  • |: ИЛИ
  • [^\s\p{L}\p{N}]+(?=\s): сопоставитьне состоящий из слов символ без пробела, за которым следует пробел
0 голосов
/ 23 октября 2019

Regex имеет возможность выполнять условные (if-then-else) операторы. Используя это, мы можем проверить, предшествует ли символу пробел;иначе, мы можем проверить, сопровождается ли это пробелом. В противном случае мы не совпадаем.

(?(?<=^|\s)\p{P}|\p{P}(?=\s|$))

Это регулярное выражение проверяет начало строки или пробела перед символами, которые вы планируете сопоставить, и, если это не удается, проверяетдля набора символов, за которым следует пробел или конец строки. \p{P} ищет любые знаки препинания. Замените \p{P} на то, что вы хотели бы захватить.

Демо

...