在BigQuery中使用Regexp_extract从URL提取category后的数字字符串
在BigQuery中提取URL里/category/后的数字字符串
首先,咱们先看看你之前写的正则哪里出问题了:[^category/]+/([^/]+)/
这里的[^category/]+是一个否定字符集,它会匹配任何不包含c、a、t、e、g、o、r、y和/的字符,这完全不是你想要的逻辑——你需要的是先精准匹配到/category/这个固定片段,而不是排除这些字符。
正确的正则表达式写法
要实现通用提取,我们可以先定位到/category/,然后捕获它后面直到下一个/的所有数字字符串。在BigQuery的REGEXP_EXTRACT里,可以这样写:
REGEXP_EXTRACT(page_path, r'/category/([0-9]+)/')
如果要兼容数字后面直接是URL结尾的情况(比如/category/12345这种格式),可以调整成匹配到/或者字符串结尾:
REGEXP_EXTRACT(page_path, r'/category/([0-9]+)(?:/|$)')
正则逻辑解释
r'/category/':精准匹配/category/这个固定片段,r表示原始字符串,避免转义问题([0-9]+):捕获1个或多个数字,这就是我们要提取的目标内容(?:/|$):非捕获组,匹配后面的/或者字符串结尾,确保即使数字是URL最后一部分也能被正确提取
测试你的示例URL
用你给出的几个测试URL验证,结果完全符合预期:
/cz/category/79478/productname→ 提取出79478https://www.store.net/de/category/49448/productname→ 提取出49448https://www.store.net/category/62448/productname→ 提取出62448/category/79455/productname→ 提取出79455
额外提示
如果你不确定目标内容是否全为数字,也可以用([^/]+)代替([0-9]+),这样能捕获/category/之后到下一个/的任意字符串,但根据你的需求,用[0-9]+会更精准,避免捕获意外内容。
内容的提问来源于stack exchange,提问作者Marcin Stańczak
相关产品推荐
相关产品推荐

