首页 > 解决方案 > 在R中匹配子字符串后查找索引

问题描述

我正在使用 grep 命令检查列表中是否存在字符串。

a <- list("IK" , "IK /// CHGB ", "IKM" ,"HGIKGF", "IK2" ,"IK2FGH" )

我正在尝试使用 grep 获取包含子字符串“IK”的字符串的索引

grep("IK",a) 

[1] 1 2 3 4 5 6

我想获取仅包含 "IK" 或 "IK" 后跟单个字符或由 /// 例如分隔的字符串的索引"IK /// CHGB" , "IK2" and "IKM"。我不打算输出像"HGIKGF" or "IKHGFTR /// BN".

所需的输出是

[1] 1 2 3 5

我想就如何做到这一点征求建议。

Edit1:请注意,我为“IK”匹配的字符串存储在一个列表中。

Matchfor <- list("IK","UK")
for(j in 1:length(Matchfor){
grep(Matchfor[j],a)
}

标签: r

解决方案


稍微扩展您的测试用例a以包含“UK.

a <- list("IK" , "IK /// CHGB ", "IKM" ,"HGIKGF", "IK2" ,"IK2FGH", "UK")
Matchfor <- c("IK","UK")
MatchPat <- paste0(Matchfor, "\\w?\\b")
lapply(MatchPat, grep, a) 
[[1]]
[1] 1 2 3 5

[[2]]
[1] 7

一点解释:\\w?可选地允许在主要模式(IK 或 UK)之后添加一个字符。 \\b表示单词边界 - 非单词字符或字符串的结尾。


推荐阅读