我正在尝试将非捕获组与
str_extract
包中的 stringr
函数一起使用。这是一个例子:
library(stringr)
txt <- "foo"
str_extract(txt,"(?:f)(o+)")
此返回
"foo"
虽然我希望它只会返回
"oo"
就像这篇文章中的那样:https://stackoverflow.com/a/14244553/3750030
如何在 R 中使用非捕获组从返回值中删除组的内容,同时使用它进行匹配?
当您使用正则表达式
(?:f)(o+)
时,这不会Capture,但它肯定会匹配它。
捕获的意思是存储在内存中以进行反向引用,以便可以用于同一字符串中的重复匹配或替换捕获字符串。
就像这篇文章中的那样:https://stackoverflow.com/a/14244553/3750030
您误解了这个答案。 非捕获组并不意味着不匹配。它在
$1
(组1)中捕获,因为它之前没有组。
如果您希望仅匹配假设B后跟A,那么您应该像这样使用
positive lookbehind
。
正则表达式:
(?<=f)(o+)
说明:
(?<=f)
这将查找 f
出现在以下标记后面,但不会匹配。(o+)
如果前面的条件为真,这将匹配并捕获为组(此处为 $1)。