BigQuery中使用正则表达式匹配‘UK driving licence’失败的问题
BigQuery正则无法匹配特定短语的排查与解决
问题描述
在BigQuery中处理GOV.UK「living in italy」指南文本时,遇到以下异常:
- 需要匹配文本第355行的短语
UK driving licence - 使用
CONTAINS_SUBSTR(text, 'UK driving licence')能成功检测到匹配 - 但
REGEXP_CONTAINS(text, r'(UK driving licence)')返回FALSE
已验证的现象:
ARRAY_LENGTH(REGEXP_EXTRACT_ALL(text, r'UK'))可正确统计出文本中UK共出现71次REGEXP_CONTAINS(text, r'extend recognition of valid')返回TRUE(该短语是目标短语的前置内容)REGEXP_CONTAINS(text, r'driving licences in italy')返回TRUE(目标短语的后续/重叠内容)- 排除大小写影响,尝试过
LOWER(text)转换后匹配、手动小写正则,结果一致
排查方向与解决方法
核心原因:非标准空白字符
最可能的问题是目标短语中存在非标准空白字符(比如非断空格、零宽空格、制表符等):
CONTAINS_SUBSTR会直接匹配所有视觉上的空白类字符- 正则表达式中的默认空格
仅匹配ASCII 32的标准空格,无法识别其他空白字符
验证与修复
测试任意空白字符匹配
用\s+替换正则中的单个空格,匹配任意数量、任意类型的空白字符:SELECT REGEXP_CONTAINS(text, r'UK\s+driving licence')如果返回
TRUE,则说明存在非标准空白字符。清理文本后匹配
先将所有空白字符替换为标准空格,再执行正则匹配:SELECT REGEXP_CONTAINS(REGEXP_REPLACE(text, r'\s+', ' '), r'UK driving licence')确认特殊字符的ASCII码
提取目标位置的空白字符ASCII码,验证是否为非标准空格:SELECT ASCII(SUBSTR(text, POSITION('UK' IN text) + 2, 1)) AS space_ascii_code FROM your_table WHERE CONTAINS_SUBSTR(text, 'UK driving licence')若返回值不是32(标准空格的ASCII码),则可确认是特殊空白字符导致的问题。
内容的提问来源于stack exchange,提问作者j_marvin
相关产品推荐
相关产品推荐

