使用R中的stringr的非捕获组的正则表达式

use*_*030 3 regex r stringr

我试图使用非捕获组与包中的str_extract功能stringr.这是一个例子:

library(stringr)
txt <- "foo"
str_extract(txt,"(?:f)(o+)")
Run Code Online (Sandbox Code Playgroud)

这回来了

"foo"
Run Code Online (Sandbox Code Playgroud)

虽然我希望它只返回

"oo"
Run Code Online (Sandbox Code Playgroud)

喜欢这篇文章:https://stackoverflow.com/a/14244553/3750030

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

小智 6

当你使用正则表达式时,(?:f)(o+)这将不会捕获,但它肯定会匹配它.

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

喜欢这篇文章:https://stackoverflow.com/a/14244553/3750030

你误解了那个答案.非捕获组并不意味着不匹配.它被捕获在$1(组1)中,因为之前没有组.

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

正则表达式: (?<=f)(o+)

说明:

  • (?<=f)这将f在以下标记后面显示,但不匹配.

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

Regex101演示

  • 仅供参考:使用`str_extract`无法访问捕获组.请改用"str_match".在这种情况下,`(?<= f)o +`就足够了. (2认同)