BigQuery regexp_instr 函数中的正则表达式

Regex in BigQuery regexp_instr function

我想通过 BigQuery 上的 REGEXP_INSTR 函数识别以下字符串:

2020-12-31T23:00:00.000Z;15,2021-12-31T23:00:00.000Z;271,2022-12-31T23:00:00.000Z;12,...

输入字符串是一个由“,”分隔的对(datetime/integer 值)列表,其中每个对元素由“;”分隔。

我的第一次(不成功的)迭代是:

'^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z;\d*)+,?'

我无法正确管理“列表”,在列表的最后一个元素之后可能不需要“,”。

你能帮我构建正则表达式模式吗?

非常感谢您的帮助:)

您可以匹配第一部分,并可选择重复前面有 , 的整个部分,这样它就不会匹配最后一个逗号。

如果末尾不能有 .,您可以将 $ 附加到模式以断言字符串的末尾。

注意转义点\.

^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z;\d*(?:,\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z;\d*)*

Regex demo

使用双转义反斜杠

^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z;\d*(?:,\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z;\d*)*