在字符串中的每n个字符中搜索一个模式

时间:2019-06-07 02:06:49

标签: r regex string

假设我有字符串ABCC321BB321A。我想搜索一个由ABC...321组成的模式,其中...可以是任何字符。但是,我只想返回可以将子字符串中的字符分为3组的结果。

例如,我不需要ABCC321 (ABC - C32 - 1),但是我想要ABCC321BB321 (ABC - C32 - 1BB - 321)

我将如何在R中执行此操作?使用正则表达式可以实现吗?我想我可以将字符串拆分成包含3组的列表,或者使用条件语句仅返回可被3整除的匹配项,以获得我想要的答案,但是我假设有一种更有效的方法。

2 个答案:

答案 0 :(得分:0)

可能有一个聪明的纯正则表达式解决方案,但是您建议的另一种选择是将字符串和模式分为三个一组,并测试字符串元素中是否包含所有模式元素,这很简单。

mystrings <- c("ABCC321BB321A", "ABCC321")

mypattern <- "ABC321"

sapply(strsplit(mystrings, "(?<=.{3})", perl = TRUE), function(x) all(strsplit(mypattern, "(?<=.{3})", perl = TRUE)[[1]] %in% x) )

[1]  TRUE FALSE

答案 1 :(得分:0)

尝试一下:

x <- "ABCC321BB321A"
threes <- regmatches(x, gregexpr(".{3}", x))[[1]]
threes
paste(threes, collapse = "-")

产生:

[[1]]
[1] "ABC" "C32" "1BB" "321"

[1] "ABC-C32-1BB-321"