具有多种可能模式的正则表达式
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
对 Z
和 Y
使用 look-ahead 和 look-behind 表达式可能是您的想法:
ptrn <- "(?<=Z)(ABC|ACD|EFG)(?=Y)"
这与 Z
和 Y
匹配,但在评估命中位置时不包括它们,因此第一个命中给出为 (2,4),这可能是您想要的
在评论中指出,如果您想将 lookahead/lookbehind((?...)
东西)与基本 R 函数(gsub()
、grep()
、grepl()
等),那么您必须指定 perl=TRUE
.
我正在寻找与“数据”中的 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
对 Z
和 Y
使用 look-ahead 和 look-behind 表达式可能是您的想法:
ptrn <- "(?<=Z)(ABC|ACD|EFG)(?=Y)"
这与 Z
和 Y
匹配,但在评估命中位置时不包括它们,因此第一个命中给出为 (2,4),这可能是您想要的
在评论中指出,如果您想将 lookahead/lookbehind((?...)
东西)与基本 R 函数(gsub()
、grep()
、grepl()
等),那么您必须指定 perl=TRUE
.