Regex, чтобы найти отрывок из текста, 4 слова до и 4 слова после текста, но взять только один отрывок - PullRequest
1 голос
/ 18 июня 2020

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

В настоящее время я использую (?:[a-zA-Z'-]+[^a-zA-Z'-]+){0,4}keyword(?:[^a-zA-Z'-]+[a-zA-Z'-]+){0,4}, но это захватит несколько отрывков, содержащих ключевое слово, когда я хочу найти только один результат.

например, поместив текст «I am hoping to find four words before a keyword and four words after the same word to show in the description for the result and if there is another keyword then i dont want to capture that»

Он будет соответствовать «четырем словам перед ключевым словом и четырем словам после« и », если есть другое ключевое слово, тогда я не хочу "мне нужно только первое совпадение.

1 Ответ

1 голос
/ 18 июня 2020

Использовать шаблон PCRE с \K, который обрезает текст, сопоставленный ранее:

(?s)^.*?\K(?:[a-zA-Z'-]+[^a-zA-Z'-]+){0,4}keyword(?:[^a-zA-Z'-]+[a-zA-Z'-]+){0,4}

См. proof

Альтернатива с группой захвата (вам нужно захваченное значение ):

(?s)^.*?((?:[a-zA-Z'-]+[^a-zA-Z'-]+){0,4}keyword(?:[^a-zA-Z'-]+[a-zA-Z'-]+){0,4})

См. другое доказательство . Возможно, вам потребуется использовать специальную функцию c или код для доступа к этому значению.

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