如何用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
相关产品推荐
相关产品推荐

