r语言 - 根据多个条件对字符串进行细分



我有一个向量,其中每个元素都是字符串。我只想保留字符串的一部分,就在'=='之前,不管它是否在字符串的开头,在&符号,或者在符号之后。以下是我的数据:

data <- c("name=='John'", "name=='David'&age=='50'|job=='Doctor'&city=='Liverpool'", 
"job=='engineer'&name=='Andrew'", 
"city=='Manchester'", "age=='40'&city=='London'"
)

我的理想格式是这样的:

[1] "name"
[2] "name" "age" "job" "city"
[3] "job" "name"
[4] "city" 
[5] "age" "city"

我所得到的最接近的是使用qdap库中的genXtract,它将数据置于上述格式,但我只知道如何在一个条件下使用它,即

qdap::genXtract(data, "&", "==")

但我不只是想要&和==,但也可以在|和==之间或字符串的开头和==

这个正则表达式的作用是捕获==出现之前的所有a-zA-Z0-9(=字母和数字)。

stringr::str_extract_all( data, "[0-9a-zA-Z]+(?=(==))")
[[1]]
[1] "name"
[[2]]
[1] "name" "age"  "job"  "city"
[[3]]
[1] "job"  "name"
[[4]]
[1] "city"
[[5]]
[1] "age"  "city"

如果希望输出为矢量,则使用

L <- stringr::str_extract_all( data, "[0-9a-zA-Z]+(?=(==))" )
unlist( lapply( L, paste, collapse = " " ) )

在搜索结果

[1] "name"             
[2] "name age job city"
[3] "job name"         
[4] "city"             
[5] "age city"  

base R中,可以使用regmatches/gregexpr

lst1 <- regmatches(data, gregexpr("\w+(?=\={2})", data, perl = TRUE))
sapply(lst1, paste, collapse = " ")
#[1] "name"     
#[2] "name age job city" 
#[3] "job name"       
#[4]  "city"      
#[5]  "age city"      

最新更新