У меня есть следующий фрейм данных:
df <- data.frame(city=c("in London", "in Manchester city", "in Sao Paolo"))
Я использую str_extract и возвращаю слово после «in» в отдельном столбце.
library(stringr)
str_extract(df$city, '(?<=in\\s)\\w+')
У меня это нормально работает в 95% случаев. Тем не менее, есть случаи, такие как «Сан-Паулу» выше, когда мое регулярное выражение возвращает «Сан», а не название города.
Может кто-нибудь, пожалуйста, помогите мне изменить его, чтобы захватить:
1) все до конца текстовой строки, из которой я извлекаю? ИЛИ
2) если после "in" есть более одного слова, верните и его
Большое спасибо.
(?<=in\\s).+
? Или(?<=in\\s)\\w+(?:\\s+\\p{Lu}\\p{L}*)?
? Похоже, вам будет безопаснее с(?<=in\\s)\\p{Lu}\\p{L}*(?:\\s+\\p{Lu}\\p{L}*)*
. - person Wiktor Stribiżew   schedule 18.01.2016gsub('^in ', '', df$city)
- person rawr   schedule 18.01.2016\\w+
останавливается, когда доходит до пробела. Вы должны быть осторожны при настройке, потому что, если вы просто разрешите пробелы, вы в конечном итоге захватите Манчестер-Сити, а не просто Манчестер. - person tblznbits   schedule 18.01.2016str_match
, так как междуin
и городом могут быть двойные пробелы. Например.cities = str_match(df$city, '\\bin\\s+(\\p{Lu}\\p{L}*(?:\\s+\\p{Lu}\\p{L}*)*)')
, а затемcities[,2]
будут хранить значения. - person Wiktor Stribiżew   schedule 18.01.2016