匹配多模式

匹配多模式

我想看看,如果"001""100""000"的4个字符的字符串中发生。01..例如,一个4个字符串可能类似于"1100""0010""1001""1111"..如何用一个命令来匹配字符串中的多个字符串?

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


千万里不及你
浏览 668回答 3
3回答

动漫人物

可以,停那儿吧。这个|在.grep模式的含义与or..这样,您就可以通过以下方法来测试您的模式:"001|100|000"作为你的模式。同时,grep是矢量化的,所以所有这些都可以一步完成:x&nbsp;<-&nbsp;c("1100",&nbsp;"0010",&nbsp;"1001",&nbsp;"1111")pattern&nbsp;<-&nbsp;"001|100|000"grep(pattern,&nbsp;x)[1]&nbsp;1&nbsp;2&nbsp;3这将返回包含匹配模式的向量的索引(在本例中为前三个)。有时,更方便的是有一个逻辑向量来告诉您向量中的哪些元素是匹配的。然后你可以用grepl:grepl(pattern,&nbsp;x)[1]&nbsp;&nbsp;TRUE&nbsp;&nbsp;TRUE&nbsp;&nbsp;TRUE&nbsp;FALSE看见?regex以获得关于R中正则表达式的帮助。编辑:为了避免手动创建模式,我们可以使用paste:myValues&nbsp;<-&nbsp;c("001",&nbsp;"100",&nbsp;"000")pattern&nbsp;<-&nbsp;paste(myValues,&nbsp;collapse&nbsp;=&nbsp;"|")

幕布斯6054654

以下是使用stringr包装require(stringr)mylist&nbsp;=&nbsp;c("1100",&nbsp;"0010",&nbsp;"1001",&nbsp;"1111")str_locate(mylist,&nbsp;"000|001|100")

红颜莎娜

对不起,这是一个附加的回答,但这是太多的评论行。我只想提醒你,可以通过paste(..., collapse = "|")作为一个单一的匹配模式使用是有限的-见下文。也许有人能知道极限在哪里?诚然,这一数字可能不现实,但根据要执行的任务,不应将其完全排除在我们的考虑之外。对于非常多的项,需要一个循环来检查模式的每个项。set.seed(0)samplefun <- function(n, x, collapse){&nbsp; paste(sample(x, n, replace=TRUE), collapse=collapse)}words <- sapply(rpois(10000000, 8) + 1, samplefun, letters, '')text <- sapply(rpois(1000, 5) + 1, samplefun, words, ' ')#since execution takes a while, I have commented out the following lines#result <- grepl(paste(words, collapse = "|"), text)# Error in grepl(pattern, text) :&nbsp;#&nbsp; &nbsp;invalid regular expression&nbsp;# 'wljtpgjqtnw|twiv|jphmer|mcemahvlsjxr|grehqfgldkgfu|# ...#result <- stringi::stri_detect_regex(text, paste(words, collapse = "|"))# Error in stringi::stri_detect_regex(text, paste(words, collapse = "|")) :&nbsp;# Pattern exceeds limits on size or complexity. (U_REGEX_PATTERN_TOO_BIG)
打开App,查看更多内容
随时随地看视频慕课网APP