有没有办法根据'和'和'或'标准过滤字符串向量(使用grepl)?

问题描述 投票:1回答:1

我需要用196个超声波样本过滤列表。列表中的名称类似于SV-14-001_P,SV-14-001_S1,SV-20-001_P,SV-20-004_S2。它们都以SV开头,参考样品来自的公司。第二个数字是样本的直径(有五种不同的直径,但在例子中我只使用14)。第三个三位数字是当前直径的样本编号,最后一个数字是指波形类型(P,S1或S2)。我想使用样本列表来选择S波起始或P波起始的脚本。这意味着直径应该相等,波浪类型应该是剪切波S1或S2(可以组合在一个列表中)或P.

到目前为止,我已经设法基于“和”过滤掉了,只需用不同的模式运行相同的代码两次,但这给了我一个带有S1样本或S2样本的列表,而不是带有S1和S2样本的列表。我也用[grepl("S2\|S2", filt.folders)]尝试过,但那没用。

parent.folder <- "//home.org.aalto.fi/meijsl1/data/Documents/GAGS/Ultrasonic 
data/Ultrasonic data - Plots"
sub.folders <- list.dirs(parent.folder, recursive=FALSE)
filt.folders = sub.folders[grepl("SV-14", sub.folders)]
filt.folders =filt.folders[grepl("S2", filt.folders)]

我想编写一个包含SV-14-xxx_S2和SV-14-xxx_S1样本的列表。所以基本上,模式应该看起来像'SV-14'和('S1'或'S2')。

并创建:

SV-14-001_S1 SV-14-001_S2 SV-14-002_S1 SV-14-001_S2 SV-14-003_S1 等等

r filtering grepl
1个回答
2
投票

要构建主模式,可以使用字符类:

"SV-14-[^_]*_S[12]"

regex demo

它将匹配SV-14-,然后是_以外的任何0或更多的字符,然后是_,然后是S12

如果要将其作为整个子目录进行匹配,则需要考虑/\字符:

"([\\\\/]|^)SV-14-[^_]*_S[12]([\\\\/]|$)"

其中([\\\\/]|^)匹配\/或字符串和([\\\\/]|$)的开头匹配\/或字符串结尾。

another regex demo

© www.soinside.com 2019 - 2024. All rights reserved.