具有多种可能模式的正则表达式

Regex with multiple possible patterns

我正在寻找与“数据”中的 ZABCY、ZACDY 或 ZEFGY 匹配的多个模式 (ptrn)。我写了下面的代码,但我的“输出”是空的。我希望有 expected_output。我哪里错了?

require(stringr)
data <- "ZABCYDZEFGYHZY"
ptrn <- "Z[ABC|ACD|EFG]Y"
output <- data.frame(str_locate_all(data, ptrn))
expected.output <- data.frame(2, 4)

我相信你需要

ptrn <- "Z(ABC|ACD|EFG)Y"

(方括号 [] 指的是字符集;() 保护您的 ABC 替代方案不被读取为 ZABC,类似地 EFGY )

但是,我对您的预期输出有点困惑。我得到

  start end
1     1   5
2     7  11

ZY 使用 look-ahead 和 look-behind 表达式可能是您的想法:

ptrn <- "(?<=Z)(ABC|ACD|EFG)(?=Y)"

这与 ZY 匹配,但在评估命中位置时不包括它们,因此第一个命中给出为 (2,4),这可能是您想要的

在评论中指出,如果您想将 lookahead/lookbehind((?...) 东西)与基本 R 函数(gsub()grep()grepl() 等),那么您必须指定 perl=TRUE.