r - 在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)
}
解决方案
稍微扩展您的测试用例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
表示单词边界 - 非单词字符或字符串的结尾。
推荐阅读
- neo4j - 查询避免冗余的树
- angular - 刷新所有组件路由
- sql - BigQuery SQL 中的数组列和聚合:为什么值没有全部聚合?
- asp.net-core - ASP.NET Core 2.1 删除使用脚手架创建的身份页面
- rest - 使用 HTTP 代理服务器流式传输 IPTV 源
- html - 使用 express 在 node.js 中获取选定的选项值
- java - 嵌套对象的 Javax 验证 - 不起作用
- vba - 当使用 DAO 和 ADO 将数据表表单直接绑定到 MS SQLServer 时,Access VBA 列快速过滤器不起作用
- python - 将文本行转换为 pandas 结构
- java - 为什么 Thread.join() 方法使用“join”这个词?