You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R语言中从文本提取任意格式日期的实现方法

嘿,这个需求我太熟了!在R里提取各种花里胡哨的日期格式其实没那么复杂,我给你分享两种实用的思路,一种是用正则精准匹配,另一种靠专门的日期包自动识别,都能搞定你提到的那些格式~

方法1:正则表达式精准提取日期字符串

如果你想先把文本里的日期片段先抠出来,再转换成标准日期格式,用stringr包的正则匹配就很合适。我写了个能覆盖你列出的所有格式的正则表达式,包括英文月份+日期+年份、各种分隔符的DD-MM/YYYY、YYYY/MM/DD这些:

# 先加载需要的包
library(stringr)

# 你的示例文本
text <- "My Friend is coming on july 10 2018 or 10/07/2018"

# 匹配多种日期格式的正则表达式
date_pattern <- paste0(
  # 匹配英文月份格式(比如April 10 2018,忽略大小写)
  "(January|February|March|April|May|June|July|August|September|October|November|December)",
  "\\s+\\d{1,2}\\s+\\d{4}|",
  # 匹配DD-MM-YYYY、DD/MM/YYYY、DD.MM.YYYY格式
  "\\d{1,2}[-/.]\\d{1,2}[-/.]\\d{4}|",
  # 匹配YYYY/MM/DD、YYYY-MM-DD、YYYY.MM.DD格式
  "\\d{4}[-/.]\\d{1,2}[-/.]\\d{1,2}"
)

# 提取所有匹配的日期字符串(ignore_case忽略月份大小写)
extracted_date_strings <- str_extract_all(text, regex(date_pattern, ignore_case = TRUE))[[1]]
extracted_date_strings
# 输出结果: [1] "july 10 2018" "10/07/2018"

拿到日期字符串后,我们可以用lubridate包把它们转换成标准的日期格式:

library(lubridate)

# 转换为标准日期(指定可能的格式顺序:mdy=月日年,dmy=日月年,ymd=年月日)
standard_dates <- parse_date_time(extracted_date_strings, orders = c("mdy", "dmy", "ymd"))
standard_dates
# 输出结果: [1] "2018-07-10 UTC" "2018-07-10 UTC"

方法2:用lubridate自动识别(更省心)

要是你懒得写复杂的正则表达式,lubridate绝对是你的救星!它的parse_date_time函数能自动识别多种常见日期格式,我们只需要先提取文本里的日期候选片段,再让它自动识别转换:

library(lubridate)
library(stringr)

text <- "My Friend is coming on july 10 2018 or 10/07/2018"

# 先提取所有可能的日期候选片段(简单正则匹配月份单词+数字组合、数字日期组合)
date_candidates <- str_extract_all(text, regex(
  "(\\w+\\s+\\d{1,2}\\s+\\d{4}|\\d{1,2}[-/.]\\d{1,2}[-/.]\\d{4}|\\d{4}[-/.]\\d{1,2}[-/.]\\d{1,2})",
  ignore_case = TRUE
))[[1]]

# 自动识别格式并转换为标准日期
standard_dates <- parse_date_time(date_candidates, orders = c("mdy", "dmy", "ymd"))
standard_dates
# 输出结果: [1] "2018-07-10 UTC" "2018-07-10 UTC"

小提示

如果你的文本里还有其他特殊日期格式,只需要扩展正则表达式或者orders参数里的格式就行,比如加上"dmY"(日月年带4位年份)、"Ymd"(年月日)这些,灵活得很~

内容的提问来源于stack exchange,提问作者rachit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:44:22