R 从字符向量中提取所有匹配模式
我有这个向量:R 从字符向量中提取所有匹配模式,r,regex,string,stringr,R,Regex,String,Stringr,我有这个向量: [1] "capacit_elab_doc_Ne sait pas du tout le faire" "capacit_elab_doc_Pas tres a l aise" [3] "capacit_elab_doc_Moyennement a l aise" "capacit_elab_doc_Plutot a l aise" [5] "capacit_elab_doc_T
[1] "capacit_elab_doc_Ne sait pas du tout le faire" "capacit_elab_doc_Pas tres a l aise"
[3] "capacit_elab_doc_Moyennement a l aise" "capacit_elab_doc_Plutot a l aise"
[5] "capacit_elab_doc_Tres a l aise" "capacit_rech_info_Ne sait pas du tout le faire"
[7] "capacit_rech_info_Pas tres a l aise" "capacit_rech_info_Moyennement a l aise"
我希望匹配这些值:
[1] "capacit_elab_doc" "capacit_rech_info" "capacit_eval_info" "capacit_id_numerique"
要获得此输出,请执行以下操作:
[1] "capacit_elab_doc" "capacit_elab_doc" "capacit_elab_doc"
[4] "capacit_elab_doc" "capacit_elab_doc" "capacit_rech_info"
[7] "capacit_rech_info" "capacit_rech_info"
我该怎么做?我更喜欢stringr解决方案。也许您可以使用
regmatches
unlist(regmatches(v,gregexpr(paste0(pat,collapse = "|"),v)))
# [1] "capacit_elab_doc" "capacit_elab_doc" "capacit_elab_doc" "capacit_elab_doc" "capacit_elab_doc"
# [6] "capacit_rech_info" "capacit_rech_info" "capacit_rech_info"
其中,v
是字符串向量,pat
表示所有模式
数据
v <- c("capacit_elab_doc_Ne sait pas du tout le faire", "capacit_elab_doc_Pas tres a l aise",
"capacit_elab_doc_Moyennement a l aise", "capacit_elab_doc_Plutot a l aise",
"capacit_elab_doc_Tres a l aise", "capacit_rech_info_Ne sait pas du tout le faire",
"capacit_rech_info_Pas tres a l aise", "capacit_rech_info_Moyennement a l aise"
pat <- c("capacit_elab_doc", "capacit_rech_info", "capacit_eval_info",
"capacit_id_numerique")
v为什么不干脆:
stringr::str\u match(string=your\u向量,
pattern=“^capacity\u elab\u doc*.^capacity\u rech\u info*.^capacity\u eval\u info*.^capacity\u id\u numerique*”)%>%as.vector
这种方法使用具有负前瞻性的正则表达式(?=)
匹配所有内容,直到第三个下划线
库(stringr)
案文[[1]]
#>[1]“能力文件”
#>
#> [[2]]
#>[1]“能力文件”
#>
#> [[3]]
#>[1]“能力文件”
#>
#> [[4]]
#>[1]“能力文件”
#>
#> [[5]]
#>[1]“能力文件”
#>
#> [[6]]
#>[1]“电容记录信息”
#>
#> [[7]]
#>[1]“电容记录信息”
#>
#> [[8]]
#>[1]“电容记录信息”
由(v0.3.0)于2020年2月5日创建如果您坚持使用stringr,一种方法是:
stringr::str_match(your_vector, '(.*)_.*')[,2]
否则,只需sub('(.*..*','\\1',您的向量)
就可以了