【问题标题】:How to extract everything until first occurrence of pattern如何提取所有内容,直到第一次出现模式
【发布时间】:2016-10-18 16:55:12
【问题描述】:

我正在尝试使用 R 中的 stringr 包从字符串中提取所有内容,直到第一次出现下划线。

我的尝试

str_extract("L0_123_abc", ".+?(?<=_)")
> "L0_"

关闭但没有雪茄。我怎么得到这个?另外,理想情况下,我想要一些易于扩展的东西,以便我可以获取第一个和第二个下划线之间的信息并获取第二个下划线之后的信息。

【问题讨论】:

    标签: r regex stringr


    【解决方案1】:

    要获取L0,您可以使用

    > library(stringr)
    > str_extract("L0_123_abc", "[^_]+")
    [1] "L0"
    

    [^_]+ 匹配除 _ 之外的 1 个或多个字符。

    另外,你可以用_分割字符串:

    x <- str_split("L0_123_abc", fixed("_"))
    > x
    [[1]]
    [1] "L0"  "123" "abc"
    

    这样,您将拥有所需的所有子字符串。

    同样可以用

    实现
    > str_extract_all("L0_123_abc", "[^_]+")
    [[1]]
    [1] "L0"  "123" "abc"
    

    【讨论】:

      【解决方案2】:

      正则表达式环视应该是

      str_extract("L0_123_abc", ".+?(?=_)")
      #[1] "L0"
      

      【讨论】:

        【解决方案3】:

        使用 gsub...

        gsub("(.+?)(\\_.*)", "\\1", "L0_123_abc")
        

        【讨论】:

          【解决方案4】:

          您可以使用 base 中的 sub 使用 _.* 来获取从 _ 开始的所有内容。

          sub("_.*", "", "L0_123_abc")
          #[1] "L0"
          

          或者使用[^_] 什么都不是_

          sub("([^_]*).*", "\\1", "L0_123_abc")
          #[1] "L0"
          

          或使用substrregexpr

          substr("L0_123_abc", 1, regexpr("_", "L0_123_abc")-1)
          #substr("L0_123_abc", 1, regexpr("_", "L0_123_abc", fixed=TRUE)-1) #More performant alternative
          #[1] "L0"
          

          【讨论】:

            猜你喜欢
            • 2018-12-14
            • 1970-01-01
            • 1970-01-01
            • 2021-01-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-05-19
            相关资源
            最近更新 更多