Sql REGEXP“提取所有提取”;搜索操作员“;在查询中

Sql REGEXP“提取所有提取”;搜索操作员“;在查询中,sql,regex,google-bigquery,Sql,Regex,Google Bigquery,我正在尝试使用BigQuery的函数来解析表单运算符query的“搜索查询”。查询字符串中可以有多个运算符/查询对,属于运算符的“子查询”可以有多个由括号括起的单词。我只想使用正则表达式从查询字符串中提取“搜索运算符” 例如: 动物:猫->[“动物”] 动物:(山狮)->[“动物”] 月份:二月日:星期日->[“月”、“日”] 日期:(7月31日)天气:(蓝天)->[“日期”,“天气”] 有什么建议吗?我绝对是一个雷格斯努卜,到目前为止我做得最好的是 REGEXP\u EXTRACT\u

我正在尝试使用BigQuery的函数来解析表单运算符query的“搜索查询”。查询字符串中可以有多个运算符/查询对,属于运算符的“子查询”可以有多个由括号括起的单词。我只想使用正则表达式从查询字符串中提取“搜索运算符”

例如:

  • 动物:猫->[“动物”]
  • 动物:(山狮)->[“动物”]
  • 月份:二月日:星期日->[“月”、“日”]
  • 日期:(7月31日)天气:(蓝天)->[“日期”,“天气”]
有什么建议吗?我绝对是一个雷格斯努卜,到目前为止我做得最好的是

REGEXP\u EXTRACT\u ALL(查询“(.\*):”)作为运算符


它递归地扩展冒号之前看到的所有文本(给我类似于[“日期”,“日期:(7月31日)天气])的结果)

我想实现的最后一个“高级”功能是,仅当搜索操作符完全由文本组成时才包括它们。例如:
时间:2020-07-08T17:09:14.043Z->[时间]

谢谢

试试下面

regexp_extract_all(query, r'([^: ]+):') AS operator    
如果要应用于问题中的样本数据,则输出为

使用

regexp\u extract\u all(查询,r'\b([a-zA-Z]+):')作为运算符

解释

--------------------------------------------------------------------------------
\b单词char(\w)和
不是单词char的东西
--------------------------------------------------------------------------------
(组和捕获到\1:
--------------------------------------------------------------------------------
[a-zA-Z]+以下任意字符:'a'到'Z','a'到'Z'
(1次或更多次(与most匹配)
(可能的金额)
--------------------------------------------------------------------------------
)结束\1
--------------------------------------------------------------------------------
:                        ':'