Regex Get Matches, исключая шаблон - PullRequest
0 голосов
/ 11 марта 2019

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

Например,

  • Здравствуйте! Это тест.Есть одно совпадение.
  • Это должно совпадать !!!!.
  • Это не совпадение.После специального символа есть пробел.

Я пробовал это, но это не то, что мне нужно.

[^a-zA-z0-9\s](?!(\s[^a-zA-z0-9]|[^a-zA-z0-9]\s))

1 Ответ

1 голос
/ 11 марта 2019

Это, кажется, делает трюк:

(?<!\s)\p{P}(?!\s)(?!$)

То есть:

  • (?<!\s): отрицательный взгляд назад, утверждая, что мы не появляемся после пробела
  • \p{P}: Соответствующая пунктуация (это общая категория знаков препинания в Юникоде)
  • (?!\s): отрицательный прогноз, утверждающий, что мы не появляемся перед пробелами
  • (?!$): еще один негативный взгляд, утверждающий, что мы не появляемся до конца файла

Вы также можете сделать это без косвенных утверждений, и вместо этого использовать группу захвата, чтобы извлечь символ пунктуации:

(?:[^\s]|^)(\p{P})[^\s$]

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...