我正在尝试使用 this blog post 中的正则表达式查询 google bigquery 表。这是稍微修改过的:
pd\.([^”,\.\(\,\`)\':\[\]\/\\={}]*)
但是,它在我的 google bigquery python 客户端 SQL 查询中不起作用:
query_results = client.run_sync_query(
"""
SELECT
REGEXP_EXTRACT(SPLIT(content, '\n'),
r'pd\.([^”,\.\(\,\`) \’:\[\]\/\\={}]*)')
FROM
[fh-bigquery:github_extracts.contents_py]
LIMIT 10
""")
query_results.run()
data = query_results.fetch_data()
data
BadRequest: BadRequest: 400 Failed to parse regular expression "pd.([^”,.(\,`) \’:[]/\={}]*)": invalid escape sequence: \’
最佳答案
此处的问题是 BigQuery 使用 re2其正则表达式操作的库。
如果您尝试相同的正则表达式,但使用 golang 风格,您将看到完全相同的 error (golang 也使用 re2)。
所以也许如果你只是删除 '
的转义您已经可以使用它了(正如我在这里测试的那样,它似乎可以正常工作)。
您可能会发现的另一个问题是 SPLIT
的结果操作是ARRAY
。这意味着 BigQuery 不会处理您的查询,因为 REGEXP_EXTRACT
的签名不允许ARRAY<STRING>
作为输入。您可以使用REGEXP_REPLACE
相反:
"""
SELECT
REGEXP_EXTRACT(REGEXP_REPLACE(content, r'.*(\\n)', ''),
r'pd\.([^”,\.\(\,\`) ’:\[\]\/\\={}]*)')
FROM
[fh-bigquery:github_extracts.contents_py]
LIMIT 10
"""
在此操作中,字符“\n”被“”替换,结果为 STRING
.
关于python - Google bigquery python 客户端库 SQL 选择正则表达式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41648824/