Это похоже на работу, используя 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"