【问题标题】:Select numeric string with dots and colon选择带点和冒号的数字字符串
【发布时间】:2021-05-18 08:08:25
【问题描述】:

我有这个字符串

string <- "Hospitalization from 25.1.2018 to 26.1.2018", "Date of hospitalization was from 28.8.2019 8:15", "Date of arrival 30.6.2018 20:30 to hospital")

而且我想在字符串的数字部分(带有点和冒号)上拥有这个

print(dates)

    c("25.1.2018", "26.1.2018", "28.8.2019 8:15", "30.6.2018 20:30")

我试过了

dates <- gsub("([0-9]+).*$", "\\1", string)

但它只给了我第一个点之前的第一个数字

【问题讨论】:

    标签: r regex string substring gsub


    【解决方案1】:

    你可以使用

    library(stringr)
    unlist(str_extract_all(string, "\\d{1,2}\\.\\d{1,2}\\.\\d{4}(?:\\s+\\d{1,2}:\\d{1,2})?"))
    # => [1] "25.1.2018"       "26.1.2018"       "28.8.2019 8:15"  "30.6.2018 20:30"
    

    请参阅regex demo

    详情

    • \d{1,2} - 一位或两位数
    • \. - 一个点
    • \d{1,2}\.\d{4} - 一位或两位数字,一个点和四位数字
    • (?:\s+\d{1,2}:\d{1,2})? - 可选出现
      • \s+ - 一个或多个空格
      • \d{1,2}:\d{1,2} - 一位或两位数,: 和一位或两位数。

    【讨论】:

      【解决方案2】:

      使用sapply:

      sapply(str_extract_all(string, "[0-9.:]+"), paste0, collapse = " ")
      [1] "25.1.2018 26.1.2018" "28.8.2019 8:15"      "30.6.2018 20:30"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多