Установить границы для слов, которые необходимо преобразовать в новую строку, указав c символ или количество слов, превышающее заданную c длину? - PullRequest
1 голос
/ 09 апреля 2020

Итак, я удалил эту строку из Google

"Raveena Tandon (born 26 October 1974) is an Indian actress who works in Hindi films."

По сути, я хочу подтвердить, что первые пара слов в результате поиска - это настоящее имя, а не просто случайное описание. Я намерен подтвердить это, установив границы, в которые может вписаться только имя. Как правило, это не более 4 слов.

Учитывая, что Википедия обычно форматирует людей topi c результаты таким образом;

Имя человека (-age info-).

Мне нужно подтвердить, что "(" существует в конце имени, длина которого не должна превышать 4 слова. Это означает, что имя может содержать 2 слова, 3 слова, столько же, сколько и граница новой строки перестает считаться при длине 4 слов или при значении "(" * "1010 *

Это будет желаемый вывод.

"Raveena Tandon"

1 Ответ

1 голос
/ 09 апреля 2020

Это похоже на работу, используя str_extract из пакета stringr:

Данные :

string <- "Raveena Tandon (born 26 October 1974) is an Indian actress who works in Hindi films."

Решение :

str_extract(string, "([A-Z][a-z]+\\s){1,4}(?=\\()")

Регулярное выражение имеет следующие компоненты:

[A-Z] соответствует любой заглавной букве, встречающейся после

[a-z]+ соответствует любой последовательности (длиной от 1 до бесконечности) строчных букв

\\s соответствует 1 пробелу

{1,4} является выражением, определяющим, что предыдущая группа захвата, а именно ([A-Z][a-z]+\\s), соответствует по крайней мере один раз и самое большее четыре раза

(?=\\() - позитивный прогноз; он «говорит»: соответствует ... если вы видите (?=\\() с правой стороны. В данном случае «видимым» является открывающая круглая скобка (, которая в регулярном выражении является метасимволом, значение которого отличается от буквального (. Чтобы соответствовать ему, его необходимо экранировать с помощью \\.

Результат :

[1] "Raveena Tandon "

РЕДАКТИРОВАТЬ :

Чтобы избавиться от символа пробела в конце матча, вы можете включить \\s в поле просмотра; тогда оно не будет использовано матчем:

str_extract(string, "([A-Z][a-z\\s]+){1,4}(?=\\s\\()")
[1] "Raveena Tandon"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...