用于 bigquery 的正则表达式在 /api 之后返回所有路径
Posted
技术标签:
【中文标题】用于 bigquery 的正则表达式在 /api 之后返回所有路径【英文标题】:Regex for bigquery to return all paths after /api 【发布时间】:2020-09-21 11:58:12 【问题描述】:我正在使用 github 的数据集来提取 /api/* 之后的所有路径,为此我使用了下面提到的查询。然而,结果并不如我所愿。如果正则表达式错误,有人可以纠正它吗?
预期结果:
/api/v1/用户
/api/任何东西/任何东西
实际返回的内容:
Frameworks/TwitterKit.framework/Resources doc/source/README.rst *
FROM
`bigquery-public-data.github_repos.files`
WHERE
(REGEXP_CONTAINS(path,r'(s|^.*/api/([^/]*)(?:/.*)?$|$1|)'))
LIMIT
100```
【问题讨论】:
试试REGEXP_CONTAINS(path, r'^/api/[^/]*(?:/.*)?$')
@WiktorStribiżew 感谢您的回答,但现在查询结果为“此查询未返回任何结果。”
嗯,正则表达式是working...
【参考方案1】:
您在正则表达式模式中使用了 Perl s
ubstitution 命令。看:
s|^.*/api/([^/]*)(?:/.*)?$|$1 |
|| |RHS
||___pattern______________|
|___ action
其中RHS
(右侧)是替换。
您只需要在 BigQuery 中使用一个模式。要匹配您想要的字符串,您可以使用
^/api/[^/]*(?:/.*)?$
请参阅RE2 regex demo。
SELECT * FROM `bigquery-public-data.github_repos.files`
WHERE REGEXP_CONTAINS(path,r'^/api/[^/]*(?:/.*)?$')
LIMIT 100
【讨论】:
【参考方案2】:如果正则表达式有误,有人可以更正吗?
#standardSQL
SELECT *
FROM `bigquery-public-data.github_repos.files`
WHERE REGEXP_CONTAINS(path, r'/api/.*')
LIMIT 100
同时,请注意:您的问题标题与问题正文不一致 - WHERE 子句中的REGEXP_CONTAINS
仅允许您返回路径中具有搜索模式的所有行 - 但不提取模式.
要提取模式 - 您需要在 SELECT 语句中使用REGEXP_EXTRACT(path, r'/api/.*')
。
【讨论】:
以上是关于用于 bigquery 的正则表达式在 /api 之后返回所有路径的主要内容,如果未能解决你的问题,请参考以下文章