如何在R中用grepl与正则匹配含日期/数字的特定文本模式
问题原因与解决方法
核心错误点
你在grepl()里设置了fixed = TRUE参数,这会强制grepl把整个匹配模式当作固定字符串处理,而非正则表达式。也就是说,你写的[0-9]+会被当成字面的字符序列"[0-9]+"去匹配,而不是“匹配一个或多个数字”的正则规则,自然匹配不到目标文本里的日期数字,所以返回0。
修正后的写法
去掉fixed = TRUE,让grepl默认启用正则匹配模式,再调整正则表达式即可:
# 基础匹配:匹配"between the dates "后紧跟数字的文本 grepl("between the dates \\d+", df2$text)
如果需要更精准匹配日期格式(比如包含斜杠的MM/DD/YY结构),可以把正则写得更具体:
grepl("between the dates \\d+/\\d+/\\d+", df2$text)
测试验证
用你给出的示例文本测试:
test_str <- "activity between the dates 2/2/21 and 3/5/2021" # 错误写法(返回FALSE) grepl("between the dates [0-9]+", test_str, fixed = TRUE) # 正确写法(返回TRUE) grepl("between the dates \\d+", test_str)
内容的提问来源于stack exchange,提问作者omaromaromar
相关产品推荐
相关产品推荐

