gpt4 book ai didi

r - 第二次匹配某个字符串后提取数字

转载 作者:行者123 更新时间:2023-12-02 03:38:17 32 4
gpt4 key购买 nike

我想从模式中提取第二次出现下划线 _ 后的数字。

通过关注此处的类似帖子

Matching different digits after a lookahead

regex - return all before the second occurrence

我试过了

    library(stringr)

pattern <- c("1/2/3_500k/855kk_1400k/AVBB")

str_extract(pattern, "(^_){2}(\\d+\\.*\\d*)")

输出

[1] NA

而不是1400。你能帮忙吗?

最佳答案

您可以将基本 R 解决方案与 regexpr/regmatches 结合使用:

regmatches(x, regexpr("^(?:[^_]*_){2}[^_0-9]*\\K\\d*\\.?\\d+", x, perl=TRUE))

或者,使用sub:

sub("^(?:[^_]*_){2}[^_0-9]*(\\d*\\.?\\d+).*", "\\1", x)

请参阅R demo online .

正则表达式是

^(?:[^_]*_){2}[^_0-9]*\K\d*\.?\d+

请参阅online regex demo .

详细信息

  • ^ - 字符串开头
  • (?:[^_]*_){2} - 2 次重复
    • [^_]* - 除 _ 之外的任何 0 个以上字符
    • _ - 下划线
  • [^_0-9]* - 除 _ 和数字之外的任何 0 个以上字符
  • \K - 匹配重置运算符丢弃迄今为止匹配的所有文本
  • \d*\.?\d+ - 浮点或整数数字模式(0+位,可选的.,然后1+位)。

sub 正则表达式变体中,\K 不是必需的,数字模式被捕获到捕获组中,字符串的其余部分与 匹配.* 模式。结果是第 1 组的内容,用 \1 占位符引用。

关于r - 第二次匹配某个字符串后提取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49470115/

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