在BigQuery中使用正则匹配特定格式员工ID的问题求助
修正BigQuery正则提取逻辑
问题核心
原正则\d{2}[A-Za-z]{2}\d{3}会匹配字符串内任意位置的符合格式片段,导致误提取长连续字符串中的子片段(比如EA2654CE19011591P5里的54CE190)。需要限定匹配目标为独立分隔的片段——即前后被非字母/数字/下划线的符号(空格、括号、连字符、下划线等)包围,或处于字符串首尾。
修正后的SQL代码
SELECT distinct Emp_no, REGEXP_EXTRACT(Emp_no, r"(?<!\w)\d{2}[A-Za-z]{2}\d{3}(?!\w)") AS emp_id FROM `table` where Emp_no IN ( 'CUSPO1234(-99SM901_6', '3500974_14HB502', '13982666_16TG254-CONV', 'EA2654CE19011591P5 - 13AH548 - ASC', '308697FR700259 ( 15AE411 - BMA ' )
正则规则说明
(?<!\w):反向预查,确保匹配位置前的字符不是字母、数字或下划线(即目标片段前是分隔符或字符串开头)\d{2}[A-Za-z]{2}\d{3}:目标格式,2位数字+2位大小写字母+3位数字(?!\w):正向预查,确保匹配位置后的字符不是字母、数字或下划线(即目标片段后是分隔符或字符串结尾)
验证结果
执行后将得到期望输出:
| Emp_no | emp_id |
|---|---|
| CUSPO1234(-99SM901_6 | 99SM901 |
| EA2654CE19011591P5 - 13AH548 - ASC | 13AH548 |
| 3500974_14HB502 | 14HB502 |
| 13982666_16TG254-CONV | 16TG254 |
| 308697FR700259 ( 15AE411 - BMA | 15AE411 |
内容的提问来源于stack exchange,提问作者Sara
相关产品推荐
相关产品推荐

