gpt4 book ai didi

r - 了解 R 正则表达式中的前瞻

转载 作者:行者123 更新时间:2023-12-04 11:34:31 26 4
gpt4 key购买 nike

我正在尝试使用多个前瞻来模拟带有 grep 的 R Perl 类型正则表达式中的 AND 运算符.但是,我不明白我看到的输出。这是一个示例代码块

a <- c("abcxyz", "abcdef", "defxyz", "abcdefxyz", "xyzdefabc")
grep("(?<=abc)(?=xyz)", a, ignore.case=TRUE, perl=TRUE) # returns 1
grep("(?=abc)(?=xyz)", a, ignore.case=TRUE, perl=TRUE) # returns integer(0)

第二行表明字符串中的位置在 abc 和 xyz 之间,并且匹配 'abcxyz'。为什么它不匹配'abcdefxyz'?

在第三行,我试图输出 1、4 和 5,但它返回未找到。为什么会这样?

我正在使用下面的替代解决方案,但我想在处理多个前瞻时使用前瞻来处理排序。
grep("abc.*xyz|xyz.*abc", a, ignore.case=TRUE, perl=TRUE)  # returns 1 4 5 as expected

最佳答案

(?<=abc)(?=xyz)正则表达式仅匹配 abc 之间的位置(字符串中的位置)和 xyz .它将在 abcxyz 中找到匹配项但在 abcdefxyz 中找不到匹配项作为 xyz没有立即关注 abc .
(?=abc)(?=xyz)模式永远不会匹配任何内容,因为它匹配字符串中的一个位置,该位置后跟一个应该等于 abc 的 3 字母序列。和 xyz同时,这是不可能的。

你正在寻找的是

^(?=.*abc)(?=.*xyz)

或者,要支持多行输入,请添加 DOTALL 修饰符 (?s) (这样 . 也可以匹配换行符):
(?s)^(?=.*abc)(?=.*xyz)

这些将匹配同时具有 abc 的字符串和 xyz以任何顺序。

R demo :
a <- c("abcxyz", "abcdef", "defxyz", "abcdefxyz", "xyzdefabc")
grep("^(?=.*abc)(?=.*xyz)", a, ignore.case=TRUE, perl=TRUE)
## => [1] 1 4 5

关于r - 了解 R 正则表达式中的前瞻,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41802272/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com