python - Google bigquery python 客户端库 SQL 选择正则表达式错误

标签 python sql regex google-bigquery

我正在尝试使用 this blog post 中的正则表达式查询 google bigquery 表。这是稍微修改过的:

pd\.([^”,\.\(\,\`)\':\[\]\/\\={}]*)

regex101 example of its usage

但是,它在我的 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/

相关文章:

python - 为什么2⁶³的大小是36字节,而2⁶³-1只有24字节?

python - cx_Oracle查询结果到嵌套字典

python - 连接到本地主机数据库的 python 中的搜索框

mysql - 保持 WHERE IN 中的顺序(子查询)

Ruby - 通过 gsub 和 regexp 替换字符串

Python - 将美元值转换为 float

python - Python 类 : subclassing and dependencies 的首选结构

php - 使用单个 mysql 查询检查 child 是否是后代

javascript - 正则表达式以大写和小写形式输出不同的单词

python简单的正则表达式帮助