str_extract_all返回不匹配的组

阿耶内克

我正在尝试str_extract_allstringr软件包中使用R中的一些文本提取值,并且我想从perl的正则表达式中使用不匹配的组(?:...)来提取并清除一行中的相关值。

运行此代码时:

library(stringr)

## Example string.
## Not the real string, but I get the same results with this one.
x <- 'WIDTH 4\nsome text that should not be matched.\n\nWIDTH   46 some text.'

## extract values
str_extract_all(x, perl('(?:WIDTH\\s+)[0-9]+'))

我想得到这个结果:

[[1]]
[1] "4"    "46"

但是我得到这个:

[[1]]
[1] "WIDTH 4"    "WIDTH   46"

我究竟做错了什么?

阿蒙

正则表达式仍然匹配WIDTH–只是不将其放入捕获组。您的正则表达式等于

WIDTH\s+[0-9]+

您的代码提取与正则表达式匹配整个子字符串。(非)捕获组不会更改此设置。

您可以使用后向断言来断言某个字符串位于当前位置之前,而不必将其包括在匹配的子字符串中:

(?<=WIDTH\s)[0-9]+

根据确切的正则表达式引擎,您不能在后视中使用变长模式。还有另一种形式可以允许这样做:

WIDTH\s+\K[0-9]+

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么`str_extract_all`对于不匹配项返回NA?

str_extract_all返回一个列表,但我想要一个向量

str_extract_all:返回在字符串中找到的所有模式连接为向量

str_extract_all带十进制数字

data.table和str_extract_all的组合

以整洁的方式使用str_extract_all的新列

使用str_extract_all的正则表达式

在 R 中为 str_extract_all 使用变量输入

从str_extract_all的输出中删除空字符串

我可以使用OR语句来指示Stringr的str_extract_all函数中的模式吗?

使用str_extract_all查找多个字符串

使用str_extract_all仅提取R中的前两个单词?

R中的正则表达式:str_extract_all

在gregexpr和str_extract_all函数中进行量化的交替

使用str_extract_all和unnest但从NA中丢失行

在Rstudio中使用'str_extract_all'函数(stringr)后未显示Unicode字符

使用str_extract_all在花括号之间提取字符串

与组匹配时,为什么findall不返回整个匹配?

当使用`stringr :: str_replace_all`时,“>”与“ [[:punct:]]”不匹配?

使用str_extract_all在R中运行正则表达式尚未实现正则表达式

模式不匹配时如何使用str-extract而不丢失数据

返回匹配的超前组

返回多个匹配组

Python:UserWarning:此模式具有匹配组。要实际获得组,请使用str.extract

匹配器返回不匹配

拆分返回不匹配

RewriteCond模式组不匹配

返回类型不匹配(或不匹配)

熊猫str.extract方法如何从列表中返回更多匹配项?