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

如何用R提取字符串中指定模式及后续日期?

解决正则提取目标模式与对应日期的问题

你的需求是提取文本中number of subscribers短语,以及紧随其后的Month Day, Year格式日期,同时忽略模式与日期之间可能存在的as of、in这类冗余字符。原脚本的问题是固定提取后续3个单词,会包含冗余内容,我们可以通过精准匹配日期格式来解决:

优化后的R脚本

library(stringr)

find_dates <- function(text){
  # 构建正则表达式:匹配目标短语 + 可选冗余短语 + 日期
  pattern <- "\\bnumber\\s+of\\s+subscribers\\s+(?:as of|in)?\\s*(\\b(?:January|February|March|April|May|June|July|August|September|October|November|December)\\s+\\d{1,2},\\s+\\d{4}\\b)"
  
  # 提取匹配结果并拼接成期望格式
  match_result <- str_match(text, pattern)
  if (!is.na(match_result[1, 1])) {
    paste("number of subscribers", match_result[1, 2])
  } else {
    NA
  }
}

测试结果

测试text1:

text1 <- "The number of subscribers as of December 31, 2022 of Netflix increased by 1.15% compared to the previous year."
find_dates(text1)

'number of subscribers December 31, 2022'

测试text2:

text2 <- "Netflix's number of subscribers in January 10, 2023 has grown more than 1.50%."
find_dates(text2)

'number of subscribers January 10, 2023'

正则逻辑说明

  • \\bnumber\\s+of\\s+subscribers\\b:用单词边界\\b确保精准匹配目标短语,避免部分匹配
  • \\s+(?:as of|in)?\\s*:非捕获组(?:...)匹配模式后可选的as of或in,前后的空白字符会被忽略,不会被提取
  • (\\b(?:January|...|December)\\s+\\d{1,2},\\s+\\d{4}\\b):捕获组提取符合格式的日期,枚举所有月份确保匹配准确,日期支持1-2位数字,年份固定为4位数字

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:45:24