在R

时间:2016-07-21 09:11:05

标签: r substring

我有下一个字符串向量

[1] "/players/playerpage.htm?ilkidn=BRYANPHI01"
[2] "/players/playerpage.htm?ilkidhh=WILLIROB027"
[3] "/players/playerpage.htm?ilkid=THOMPWIL01"

我正在寻找一种方法来检索在等号后面放置的字符串部分,这意味着我想得到一个这样的矢量

[1] "BRYANPHI01"
[2] "WILLIROB027"
[3] "THOMPWIL01"

我尝试使用substr但是为了工作我必须确切地知道在字符串中放置等号的位置以及我想要检索的部分在哪里结束

4 个答案:

答案 0 :(得分:2)

我们可以使用sub来匹配非=[^=]*)后跟=的零个或多个字符,并将其替换为'' }。

sub("[^=]*=", "", str1)
#[1] "BRYANPHI01"  "WILLIROB027" "THOMPWIL01" 

数据

str1 <-  c("/players/playerpage.htm?ilkidn=BRYANPHI01",  
          "/players/playerpage.htm?ilkidhh=WILLIROB027",
          "/players/playerpage.htm?ilkid=THOMPWIL01")

答案 1 :(得分:2)

使用stringr

library(stringr)
word(str1, 2, sep = '=')
#[1] "BRYANPHI01"  "WILLIROB027" "THOMPWIL01"

答案 2 :(得分:1)

使用strsplit

strsplit(str1, "=")[[1]][2]
# [1] "BRYANPHI01"

使用Sotos评论将结果作为矢量:

sapply(str1, function(x){
  strsplit(x, "=")[[1]][2]
})

答案 3 :(得分:0)

另一种基于正则表达式的解决方案,但是提取而不是替换,这可能更有效。

我使用的stringi包提供了比基础R更强大的正则表达式引擎(特别是支持后视)。

str1 <-  c("/players/playerpage.htm?ilkidn=BRYANPHI01",  
          "/players/playerpage.htm?ilkidhh=WILLIROB027",
          "/players/playerpage.htm?ilkid=THOMPWIL01")
stri_extract_all_regex(str1, pattern="(?<==).+$", simplify=T)

(?<==)是一个后视:仅当前面带有等号时,正则表达式才会匹配,但等号不会成为匹配的一部分。

.+$匹配所有内容直到结束。如果您对匹配的格式有信心,可以用更精确的符号替换点。例如,&#39; \ w&#39;匹配任何字母数字字符,因此您可以使用"(?<==)\\w+$"(必须转义\,以便最终得到\\w)。