[英]Match multiple substrings from another list of all possible substrings in R
[英]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 中提取市場名稱位? 基本上我想循環V
和S
,如果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
這樣的正則表達式,從而提取GOLD
或SILVER
。 如果正則表達式不匹配,它將只返回 NA。
請注意,如果您需要僅在用_
符號包圍時匹配GOLD
或SILVER
,請將paste(V, collapse="|")
替換為paste0("(?<=_)(?:", paste(V, collapse="|"), ")(?=_)")
:
> str_extract(S, paste0("(?<=_)(?:", paste(V, collapse="|"), ")(?=_)"))
[1] "GOLD" "SILVER" NA "GOLD"
它將創建一個像(?<=_)(?:GOLD|SILVER)(?=_)
這樣的正則表達式,並且只有在前面有一個_
時才會匹配GOLD
或SILVER
( (?<=_)
,一個正面的后視)並且如果值后面有一個_
(由於(?=_)
正向前瞻)。 前瞻不會將匹配的文本添加到匹配中(它們是非消耗性的)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.