2

Я пытаюсь собрать поиск по регулярному выражению, который находит любые два (или более) слова, которые находятся в пределах n (например, более 1, менее 5) слов друг друга. Цель состоит в том, чтобы найти текст в прозе и найти ненужные повторения слов, близких друг к другу.

Пример: в следующем тексте поиск должен идентифицировать «пакет:»

Почтальон доставил посылку, и посылка была тяжелой.

Задача состоит в том, что два слова могут быть любыми двумя словами, но должны быть одинаковыми двумя словами. Я пытался найти способ работы с * или + (я довольно плохо знаком с регулярными выражениями), но, конечно, подстановочные знаки будут соответствовать каждому слову, поэтому они не работают. Существует ли какая-либо структура поиска, например, $1 within n of $1 которая бы переводила в регулярные выражения?

1 ответ1

1

Я не думаю, что здесь нужно регулярное выражение - вы не можете выразить это, если не знаете слов раньше.

Итак, я думаю, вы могли бы пойти дальше и проанализировать каждое слово из текста (например, сортировка, затем удаление дубликатов). Затем вы запускаете следующее регулярное выражение для каждого найденного слова (здесь слово foo):

\bfoo\W+(?:\w+\W+){1,5}?foo\b

Здесь \b - граница слова. Тогда вы соответствуете фактическому слову. После этого \W - любой несловесный символ, несколько раз. Теперь вы начинаете группу (окруженную ()), что может происходить от 1 до 5 раз ({1,5}). Группа не будет захвачена (?: .

Смотрите пример в действии здесь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .