在 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)。
我正在尝试将非捕获组与 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)。