【问题标题】:R regex between two strings or end of string两个字符串之间或字符串结尾的 R 正则表达式
【发布时间】:2020-02-29 18:42:40
【问题描述】:

我有这样的字符串:

a = "USER  2020-02-09 01:13SOMETHING INTERESTING HERE.USER  2020-02-10 08:30and something else comes here"

我想提取 HH:MM 时间和关键字“USER”之间的所有内容。

如果我使用正则表达式通过sringr::str_extract_all 定位时间规范和 USER 之间的内容,我会得到:

str_extract_all(a, pattern = '([0-9]{2,}:[0-9]{2,})(.*)(?=USER)')

# [[1]]
# [1] "01:13SOMETHING INTERESTING HERE."

我可以在正则表达式中添加什么来说明它应该在 HH:MM 和 USER 之间搜索 或在 HH:MM 和字符串结尾之间进行搜索(这样我也会得到 @987654324 @)?

【问题讨论】:

    标签: r regex stringr


    【解决方案1】:

    您可以使用匹配 USER 或断言字符串结尾 (?:\bUSER|$) 和捕获组 (.*?),而不是使用环视方法

    [0-9][0-9]:[0-9][0-9](.*?)(?:\bUSER|$)
    

    Regex demo | R demo

    例如

    库(字符串)

    a = "USER  2020-02-09 01:13SOMETHING INTERESTING HERE.USER  2020-02-10 08:30and something else comes here"
    str_match_all(a, "[0-9][0-9]:[0-9][0-9](.*?)(?:\\bUSER|$)")[[1]][, 2]
    

    输出

    [1] "SOMETHING INTERESTING HERE."   "and something else comes here"
    

    【讨论】:

      【解决方案2】:

      我们可以使用正则表达式环视来做到这一点

      library(stringr)
      str_extract(a, "(?<=\\b\\d{2}:\\d{2}).*(?=USER)")
      #[1] "SOMETHING INTERESTING HERE."
      

      如果我们要提取所有的组件

      str_extract_all(a, "(?<=\\b\\d{2}:\\d{2}).*(?=USER)|(?<=\\b\\d{2}:\\d{2})[^0-9]+$")
      #[[1]]
      #[1] "SOMETHING INTERESTING HERE."   "and something else comes here"
      

      或者以更紧凑的方式

      str_extract_all(a, "(?<=\\b\\d{2}:\\d{2})[^0-9]+(?=(USER)|$)")
      #[[1]]
      #[1] "SOMETHING INTERESTING HERE."   "and something else comes here"
      

      如果还需要时间分量

      str_extract_all(a, "\\b\\d{2}:\\d{2}[^0-9]+(?=(USER)|$)")
      #[[1]]
      #[1] "01:13SOMETHING INTERESTING HERE."   "08:30and something else comes here"
      

      【讨论】:

      • 太棒了!非常感谢。尤其是str_extract_all(a, "(?&lt;=\\b\\d{2}:\\d{2})[^0-9]+(?=(USER)|$)") 正是我所需要的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-08
      • 2014-06-12
      • 2012-05-30
      • 2014-05-14
      相关资源
      最近更新 更多