我有以下数据框:
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%的情况下,这对我来说很好。但是,有些情况如上面的“圣保罗”,我的正则表达式会返回“Sao”而不是城市名称。
有人可以帮我修改它以获取:
1)我要从中提取的文本字符串的末尾的所有内容? OR
2)'in'后面有多个单词,然后返回
非常感谢。
答案 0 :(得分:1)
这个衬垫是否适合你?
unlist(lapply(strsplit(c("in London", "in Sao Paulo", "in Manchester City"), "in "), function(x) x[2]))
[1] "London" "Sao Paulo" "Manchester City"
答案 1 :(得分:1)
要在第一个in
后跟一个空格后匹配所有其余字符串,您可以使用
(?<=in\\s).+
lookbehind将in
介词与后面的空格匹配,但不会在匹配中返回,因为lookbehinds是零宽度断言。
答案 2 :(得分:0)
你可以试试这个:
library(stringr)
df$onlyCity <- str_extract(df$city, '[^in ](.)*')
df
city onlyCity
1 in London London
2 in Manchester city Manchester city
3 in Sao Paolo Sao Paolo
答案 3 :(得分:0)
gsub("^in[ ]*(.*$)", "\\1", df$city)
[1] "London" "Manchester city" "Sao Paolo"
假设你的字符串以"in"
开头,后跟一些空格(不会失败多于一个),然后是从第一个非空格字符捕获的感兴趣的文本,直到字符串的结尾。