非捕获组通过str_extract匹配

问题描述 投票:0回答:1

我正在尝试将非捕获组与

str_extract
包中的
stringr
函数一起使用。这是一个例子:

library(stringr)
txt <- "foo"
str_extract(txt,"(?:f)(o+)")

此返回

"foo"

虽然我希望它只会返回

"oo"

就像这篇文章中的那样:https://stackoverflow.com/a/14244553/3750030

如何在 R 中使用非捕获组从返回值中删除组的内容,同时使用它进行匹配?

regex r stringr
1个回答
12
投票

当您使用正则表达式

(?:f)(o+)
时,这不会Capture,但它肯定会匹配它。

捕获的意思是存储在内存中以进行反向引用,以便可以用于同一字符串中的重复匹配或替换捕获字符串。

就像这篇文章中的那样:https://stackoverflow.com/a/14244553/3750030

您误解了这个答案。 非捕获组并不意味着不匹配。它在

$1
(组1)中捕获,因为它之前没有组。

如果您希望匹配假设B后跟A,那么您应该像这样使用

positive lookbehind

正则表达式:

(?<=f)(o+)

说明:

  • (?<=f)
    这将查找
    f
    出现在以下标记后面,但不会匹配

  • (o+)
    如果前面的条件为真,这将匹配并捕获为组(此处为 $1)。

Regex101 演示

© www.soinside.com 2019 - 2024. All rights reserved.