如何在BigQuery中实现正则正向前瞻与后顾的替代方案?
BigQuery中替代前瞻/后顾正则匹配特定单词前后字符的方法
需求是筛选出单词ben前后存在-或_的字符串,示例如下:
abentest - 不匹配 bentest - 不匹配 aben - 不匹配 a-ben - 匹配 a_ben - 匹配 ben-test - 匹配 a-ben-test - 匹配 a_ben-test - 匹配
原本依赖正向前瞻和后顾的正则.*((?<=[_-])(ben)|(ben)(?=[_-])).*在BigQuery的RE2引擎里无法运行,因为RE2不支持零宽断言(前瞻、后顾),可以用以下替代方案:
直接匹配相邻字符组合
使用正则表达式 .*([_-]ben|ben[_-]).*,核心思路是把原本用零宽断言检查的-_字符,直接和ben组合成匹配模式:
[_-]ben:匹配-或_紧跟ben的情况(比如a_ben、a-ben里的_ben、-ben)ben[_-]:匹配ben紧跟-或_的情况(比如ben-test里的ben-)
这个正则能准确命中所有符合要求的字符串,同时排除那些ben前后没有-_的场景。
在BigQuery中可以这样使用(以筛选表中符合条件的字段为例):
SELECT your_column FROM your_table WHERE REGEXP_CONTAINS(your_column, r'.*([_-]ben|ben[_-]).*')
内容的提问来源于stack exchange,提问作者zangw
相关产品推荐
相关产品推荐

