使用stringr从R中的文本字符串中提取一个或多个单词

时间:2016-01-17 22:52:15

标签: regex r stringr

我有以下数据框:

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'后面有多个单词,然后返回

非常感谢。

4 个答案:

答案 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"开头,后跟一些空格(不会失败多于一个),然后是从第一个非空格字符捕获的感兴趣的文本,直到字符串的结尾。