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

如何从BigQuery逐行读取文本字段并提取动态位置的日期

在BigQuery中提取PDF文本中位置不固定的日期

如果PDF提取的文本里日期位置不固定,核心问题大概率是正则表达式没匹配到目标格式,或者没处理多行文本的情况。以下是针对不同场景的解决方案:

1. 匹配通用日期格式(无上下文关键词)

BigQuery的正则默认是单行模式,无法匹配跨换行的内容,所以要先加(?s)开启单行模式,让.能匹配换行符。然后根据你的日期格式调整正则:

示例查询(覆盖常见格式)

SELECT
  -- 匹配 MM/DD/YYYY 格式,比如 10/05/2024
  REGEXP_EXTRACT(text, r'(?s)\b(\d{2}/\d{2}/\d{4})\b') AS mm_dd_yyyy,
  -- 匹配 YYYY-MM-DD 格式,比如 2024-10-05
  REGEXP_EXTRACT(text, r'(?s)\b(\d{4}-\d{2}-\d{2})\b') AS yyyy_mm_dd,
  -- 匹配带月份名称的格式,比如 Oct 5, 2024 或 October 05, 2024
  REGEXP_EXTRACT(text, r'(?s)\b([A-Za-z]{3,9} \d{1,2}, \d{4})\b') AS month_name_date
FROM sample.file1
  • \b是单词边界,避免匹配到长数字串中的部分日期(比如12345678里的23/45/6789)
  • 如果有多个日期,用REGEXP_EXTRACT_ALL返回数组:
    SELECT
      REGEXP_EXTRACT_ALL(text, r'(?s)\b(\d{2}/\d{2}/\d{4}|\d{4}-\d{2}-\d{2}|[A-Za-z]{3,9} \d{1,2}, \d{4})\b') AS all_dates
    FROM sample.file1
    

2. 结合上下文关键词提取(更精准)

如果日期前后有固定关键词(比如"Invoice Date:"、"签发日期:"),直接匹配关键词+日期,能避免误提取:

示例(假设日期前有"开票日期:")

SELECT
  REGEXP_EXTRACT(text, r'(?s)开票日期:\s*(\d{4}-\d{2}-\d{2})') AS invoice_date
FROM sample.file1
  • \s*匹配任意数量的空格、换行,兼容关键词和日期之间的排版差异

3. 处理带时间的日期格式

如果日期包含时间(比如10/05/2024 14:30),调整正则兼容时间部分:

SELECT
  REGEXP_EXTRACT(text, r'(?s)\b(\d{2}/\d{2}/\d{4}(?: \d{2}:\d{2})?)\b') AS date_with_time
FROM sample.file1
  • (?: ... )是非捕获组,避免把时间单独提取出来

注意事项

  • 先通过SELECT text FROM sample.file1 LIMIT 5查看实际文本内容,确认日期的具体格式和上下文
  • 如果日期格式有变体(比如带前导零/不带、分隔符是.而非-),对应调整正则里的分隔符和数字匹配规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:00:54