【问题标题】:Regex with non-capturing group using stringr in R在 R 中使用 stringr 的具有非捕获组的正则表达式
【发布时间】:2016-03-26 16:14:41
【问题描述】:

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

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

这会返回

"foo"

虽然我希望它只返回

"oo"

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

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

【问题讨论】:

  • 试试str_extract(txt,"(?&lt;=f)(o+)")

标签: regex r stringr


【解决方案1】:

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

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

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

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

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

正则表达式: (?&lt;=f)(o+)

说明:

  • (?&lt;=f) 这将寻找 f 出现在以下令牌后面,但不匹配

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

Regex101 Demo

【讨论】:

  • 仅供参考:str_extract 无法访问捕获组。请改用str_match。在这种情况下,(?&lt;=f)o+ 就足够了。
  • 现在知道了!感谢您的详细解释!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多