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

Regex with non-capturing group using stringr in R

我正在尝试将非捕获组与 stringr 包中的 str_extract 函数一起使用。这是一个例子:

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

这个returns

"foo"

虽然我希望它只 return

"oo"

像这样 post:

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

当您使用正则表达式时 (?:f)(o+) 这不会 Capture 但它肯定会匹配它。

捕获的意思是存储在内存中用于向后引用,以便在同一个字符串中重复匹配或替换捕获 字符串.

like in this post:

你误解了那个答案。 非捕获组并不意味着不匹配。它在</code>(第1组)中被捕获,因为之前没有组</p> <p>如果你希望 <strong>Only</strong> 匹配假设 <em>B</em> 后跟 <em>A</em> 那么你应该使用<code>positive lookbehind像这样。

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

解释:

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

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

Regex101 Demo