在最后但一个空格和r中的最后一个空格之间提取字符串

时间:2014-08-29 00:56:44

标签: regex r

我想在r中的最后一个空格和最后一个空格之间拾取单词。例如,对于字符串'Albert Avenue Ngahio 6088',我想要的输出是

[1] "Ngahio"

对于字符串'Barie Road Johnvile 6051',我想要选择

[1] "Johnvile"

谢谢。

3 个答案:

答案 0 :(得分:2)

我想你可能想要sapplysapplystrsplit

非常简单
> s <- c("Albert Avenue Ngahio 6088", "Barie Road Johnvile 6051")
> sapply(strsplit(s, "\\s+"), `[`, 3)
# [1] "Ngahio"   "Johnvile"

或者,从末尾开始查找元素的更通用的方法是

> sapply(strsplit(s, "\\s+"), tail, 2)[1,]
# [1] "Ngahio"   "Johnvile"

答案 1 :(得分:0)

尝试:

ss = 'Albert Avenue Ngahio 6088'
uu = unlist(strsplit(ss, ' '))
uu
[1] "Albert" "Avenue" "Ngahio" "6088"  

uu[length(uu)-1]
[1] "Ngahio"

可以创建一个功能:

myfn = function(ss){
 uu = unlist(strsplit(ss, ' '))
 uu[length(uu)-1]
}

myfn("Albert Avenue Ngahio 6088")
[1] "Ngahio"

myfn('Barie Road Johnvile 6051')
[1] "Johnvile"

答案 2 :(得分:0)

通过sub

> f <- "Albert Avenue Ngahio 6088"
> sub("^.*?(\\S+)\\s*\\S+$", "\\1", f, perl=TRUE)
[1] "Ngahio"
> sub("^.*?(\\S+)\\s*\\S+$", "\\1", "Barie Road Johnvile 6051", perl=TRUE)
[1] "Johnvile"

模式说明:

  • ^断言我们刚开始。
  • .*?匹配任何字符零次或多次。 ?迫使正则表达式引擎进行最短匹配后的*量词。
  • (\S+)捕获一个或多个非空格字符,并将其存储到一个组中。您可以使用它的索引号来引用之后捕获的内容。
  • \s*匹配零个或多个空格字符。
  • \S+$匹配一个或多个非空格字符,该字符必须是最后一个字符串,因为以下行结束锚$