Regex - найти слово в строке - PullRequest
       62

Regex - найти слово в строке

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

У меня есть строка: prawy p pęknięty p zderzak pęknięcie (это польский язык)

Я хочу выбрать все p (кроме "p" в словах "pęknięty" и "peknięcie")

Я пытался сделать что-то подобное: \b(s*ps*)\b, но это не работает должным образом. Есть идеи?

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

Вы можете использовать отрицательный взгляд и класс символов:

\bp(?!([eę]knię(?:cie|ty)\b)

По частям

  • \bp, которому предшествует граница слова
  • (?! Если то, что прямо справа, не является
    • [eę]knię Совпадение e или ę, за которым следует knię
    • (?:cie|ty)\b Совпадение cie или ty играница слова
  • ) Закрыть отрицательный прогноз

Regex demo

Использование класса символов может соответствоватьнедопустимый вариант e или ę в словах.

Чтобы точно соответствовать словам, вы можете сопоставить их между границами слов

\bp(?!ęknięty\b|ęknięcie\b)

Regex demo

0 голосов
/ 10 октября 2019

Может быть,

\bp(?=[a-z]+|\s|$)

или

(?!pęknięcie|pęknięty)\bp

может просто отлично работать.

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

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


Если вы хотите упростить / изменить / изучить выражение, это было объяснено на верхней правой панели regex101.com . Если хотите, вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами входных данных.


RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here

...