匹配多个模式

Nar*_*ni 21 regex grep r pattern-matching

我想看看,如果"001"还是"100"还是"000"在4个字符的字符串发生01.例如,4个字符的字符串可以是"1100""0010""1001""1111".如何使用单个命令匹配字符串中的许多字符串?

我知道grep可以用于模式匹配,但是使用grep,我一次只能检查一个字符串.我想知道多个字符串是否可以与其他命令一起使用或者与grep本身一起使用.

And*_*rie 41

是的你可以.在|一个grep模式具有相同的含义or.因此,您可以使用模式来测试"001|100|000"您的模式.同时,grep是矢量化的,所以所有这一切都可以一步完成:

x <- c("1100", "0010", "1001", "1111")
pattern <- "001|100|000"

grep(pattern, x)
[1] 1 2 3
Run Code Online (Sandbox Code Playgroud)

这将返回一个索引,其中包含哪些向量包含匹配模式(在本例中为前三个).

有时,使用逻辑向量可以更方便地告诉您向量中的哪些元素匹配.然后你可以使用grepl:

grepl(pattern, x)
[1]  TRUE  TRUE  TRUE FALSE
Run Code Online (Sandbox Code Playgroud)

有关?regexR中正则表达式的帮助,请参阅


编辑: 为避免手动创建模式,我们可以使用paste:

myValues <- c("001", "100", "000")
pattern <- paste(myValues, collapse = "|")
Run Code Online (Sandbox Code Playgroud)

  • @DavidArenburg :-)我从苦涩的经历中学到了R中没有什么是不可能的.它总是只是一个问题! (4认同)

Ram*_*ath 7

这是一个使用stringr包的解决方案

require(stringr)
mylist = c("1100", "0010", "1001", "1111")
str_locate(mylist, "000|001|100")
Run Code Online (Sandbox Code Playgroud)