在R中使用str_extract_all从PDF提取日期时间字段失败求助
解决R中str_extract_all提取PDF跨行列日期时间的问题
你的正则匹配失败有两个核心原因:
- "Est Date"和目标日期时间分属两行,原正则用
+仅匹配空格,无法识别换行符; - 原正则未包含时间部分的匹配规则,即使匹配到日期也拿不到完整的日期时间值。
修正方案
根据PDF文本的结构,用以下两种方式调整正则表达式:
方式1:匹配包含"Est Date"的完整片段
library(stringr) # 模拟PDF提取的文本 pdf_text <- "Est Date 14-Apr-1988 11:59:49" # 修正后的正则:用\\s+匹配任意空白(含换行),同时覆盖时间部分 Est_date <- str_extract_all(pdf_text, "Est Date\\s+\\d{2}-[A-Za-z]{3}-\\d{4}\\s+\\d{2}:\\d{2}:\\d{2}")
输出结果会包含"Est Date\n14-Apr-1988 11:59:49"。
方式2:仅提取日期时间部分(不含"Est Date")
用正向先行断言排除"Est Date",只保留目标值:
Est_date_only <- str_extract_all(pdf_text, "(?<=Est Date\\s+)\\d{2}-[A-Za-z]{3}-\\d{4}\\s+\\d{2}:\\d{2}:\\d{2}")
输出结果为[[1]] [1] "14-Apr-1988 11:59:49",完全符合你的预期。
正则规则说明
\\s+:匹配1个或多个任意空白字符(包括换行、空格、制表符),解决跨换行的匹配问题;(?<=Est Date\\s+):正向先行断言,确保目标内容前存在"Est Date"加空白,但不将其纳入结果;\\d{2}-[A-Za-z]{3}-\\d{4}:匹配日-英文月缩写-年的格式;\\s+\\d{2}:\\d{2}:\\d{2}:匹配空格分隔的时:分:秒时间格式。
内容的提问来源于stack exchange,提问作者Ram Subramanian
相关产品推荐
相关产品推荐

