簡體   English   中英

匹配來自所有可能子串的另一個列表的子串

[英]match substring from another list of all possible substrings

我有一個包含市場名稱和其他內容的長字符串向量

S = c('123_GOLD_534', '531_SILVER_dfds', '93_COPPER_29dad', '452_GOLD_deww')

另一個向量包含所有可能的市場

V = c('GOLD','SILVER')

如何從 S 中提取市場名稱位? 基本上我想循環VS ,如果grepl(V[i], S[j])V[i]替換S[j]

所以結果應該是這樣的

c('GOLD','SILVER',NA,'GOLD')

您可以使用str_extract的 str_extract :

> library(stringr)
> str_extract(S, paste(V, collapse="|"))
[1] "GOLD"   "SILVER" NA       "GOLD"  

paste(V, collapse="|")將創建一個像GOLD|SILVER這樣的正則表達式,從而提取GOLDSILVER 如果正則表達式不匹配,它將只返回 NA。

請注意,如果您需要僅在用_符號包圍時匹配GOLDSILVER ,請將paste(V, collapse="|")替換為paste0("(?<=_)(?:", paste(V, collapse="|"), ")(?=_)") :

> str_extract(S, paste0("(?<=_)(?:", paste(V, collapse="|"), ")(?=_)"))
[1] "GOLD"   "SILVER" NA       "GOLD"  

它將創建一個像(?<=_)(?:GOLD|SILVER)(?=_)這樣的正則表達式,並且只有在前面有一個_時才會匹配GOLDSILVER(?<=_) ,一個正面的后視)並且如果值后面有一個_ (由於(?=_)正向前瞻)。 前瞻不會將匹配的文本添加到匹配中(它們是非消耗性的)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM