gpt4 book ai didi

regex - str_extract_all 返回不匹配的组

转载 作者:行者123 更新时间:2023-12-02 07:34:15 27 4
gpt4 key购买 nike

我正在尝试使用 stringr 包中的 str_extract_all 从 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]+

您的代码提取与正则表达式匹配的整个 子字符串。 (非)捕获组不会改变这一点。

你可以使用 lookbehind 断言某个字符串出现在当前位置之前,而不将其包含在匹配的子字符串中:

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

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

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

关于regex - str_extract_all 返回不匹配的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18514954/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com