【问题标题】:Match string between ; and % [duplicate]匹配字符串;和 % [重复]
【发布时间】:2021-02-25 02:52:05
【问题描述】:

我希望提取字符串中不带 % 符号的十进制值。所以在这种情况下,我想要数字 0.45

x <- "document.write(GIC_annual[\"12-17 MTH\"][\"99999.99\"]);0.450%"
str_extract(x, "^;[0-9.]")

我的尝试失败了。这是我的想法。

  • 从分号 ^; 处开始提取
  • 抓取 0 到 9 之间的任意数字。
  • 包括小数点

【问题讨论】:

    标签: r regex


    【解决方案1】:

    你也有这个选项:

    stringr::str_extract(y, "\\d\\.\\d{1,}(?=%)")
    [1] "0.450"
    

    所以基本上你向前看并检查是否有%,如果有,你捕获它之前的数字。

    详情

    \\d数字;

    \\.点;

    \\d数字;

    {1,} 在. 之后捕获一位或多位数字;

    (?=%)往前看是否有%,如果有则返回捕获的号码

    【讨论】:

    • 所以它搜索一个 % 符号 - (?=%)。如果找到一个,那么它会在 % 符号之前查找一个数字,然后是一个小数,然后是任意数量的数字。是这样吗?
    • 没错,如果 (?=%) 为真,那么它会返回并找到您想要的模式
    【解决方案2】:

    由于您不想在输出中使用分号,请将其用作后向正则表达式。

    stringr::str_extract(x, "(?<=;)[0-9]\\.[0-9]+")
    #[1] "0.450"
    

    在基础 R 中使用 sub :

    sub('.*;([0-9]\\.[0-9]+).*', '\\1', x)
    

    【讨论】:

      猜你喜欢
      • 2015-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-26
      • 1970-01-01
      • 1970-01-01
      • 2018-01-29
      • 2018-06-15
      相关资源
      最近更新 更多