Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式在read_gbq函数中的REGEXP_提取失败_Python_Regex_Google Bigquery_Escaping - Fatal编程技术网

Python 正则表达式在read_gbq函数中的REGEXP_提取失败

Python 正则表达式在read_gbq函数中的REGEXP_提取失败,python,regex,google-bigquery,escaping,Python,Regex,Google Bigquery,Escaping,我无法在read_gbq函数中成功执行正则表达式函数(即REGEXP_EXTRACT) read_gbq来自pandas_gbq模块 我的Python程序中的import语句是:from pandas_gbq import read_gbq 在我的环境中,pandas gbq的版本是:0.8.0 我认为,正则表达式失败是因为无法识别双引号上的黑色斜杠转义字符 这个正则表达式在大型查询和使用Python的在线正则表达式测试程序中工作良好(请参见下面的代码部分) 谢谢你的时间和关注 componen

我无法在read_gbq函数中成功执行正则表达式函数(即REGEXP_EXTRACT)

read_gbq来自pandas_gbq模块

我的Python程序中的import语句是:from pandas_gbq import read_gbq

在我的环境中,pandas gbq的版本是:0.8.0

我认为,正则表达式失败是因为无法识别双引号上的黑色斜杠转义字符

这个正则表达式在大型查询和使用Python的在线正则表达式测试程序中工作良好(请参见下面的代码部分)

谢谢你的时间和关注

component = 'CO_ORDER_SUMMARY'
def Read_CO_Order_Summary():                            

        query = ('select co.timestamp, co.jsonPayload._userid_ as co_SVOC, co.jsonPayload.response,  \
                 REGEXP_EXTRACT(co.jsonPayload.response, customerOrderId\":\"([^\"]*)\".*) as CustomerOrderID \
        from `exported_logs_v2.mcc_checkout_service_servicelog_20190623` co  '
             'where co.jsonPayload.component = ' '"' + component + '"' 

      'order by co.timestamp, co.jsonPayload._userid_ '
      'limit 1'
                  )

        co_agg = read_gbq(query, projectid, dialect='standard')

        return(co_agg)
co_agg = Read_CO_Order_Summary()

**ERROR MESSAGE**
GenericGBQException: Reason: 400 Syntax error: Expected “)” but got string literal “:” at [1:253]

您应该在python字符串中转义
\
字符-只需将
\
替换为
\

如果
co.jsonPayload.response
是有效的JSON字符串,您可以使用
JSON\u EXTRACT\u标量(co.jsonPayload.response,'$.customerOrderId')

您的查询字符串是有效字符串吗?您看起来有几个
引号,但没有将任何内容连接在一起。您能否将函数修改为
打印(查询)
,并确保它提供了您所期望的语句?谢谢您的建议。创建查询字符串需要单引号,解析器将捕获不平衡的单引号,并指示“扫描字符串文字时下线”警告。我的报价中没有这样的警告,明白了。我不熟悉python中的字符串连接方法。注意,如果
co.jsonPayload.response
是一个有效的JSON字符串,您还可以使用
JSON\u EXTRACT\u标量(co.jsonPayload.response,'$.customerOrderId')
将其固定为rtenha!!!非常感谢。我仍然想理解为什么REGEXP\u EXTRACT函数可以在大查询和regex tester中工作,而不能在read\u gbq函数中工作。请将此作为答案提交,以便我可以为您提供学分。再次感谢!谢谢你的建议。我已经尝试过“逃离”,但这并没有解决问题。同样,这个正则表达式在Big Query和在线正则表达式测试仪中都成功运行。我相信单转义字符(应该足够了)没有被识别为转义字符。实际上,您可以尝试将SQL查询保存到文件中,然后在python中打开并执行它。那样的话,它会保留任何维德的性格。我不确定我是否会遵循。您看到的代码是从一个.py程序中剪切出来的,所以我不确定将其保存到另一个文件,然后重新打开它能完成什么。我的意思是将原始查询字符串保存为单独的文件。如果使用open()函数读取,则不会因为转义wierdness而丢失任何字符。
****************************************
IN REGEX101.com TESTER (using the Python "flavor" setting)
REGEX
customerOrderId\":\"([^\"]*)\".*
STRING
{"lastModifiedDate":"2019-06-23 16:50:18.212","localStoreId":1515,"cartId":"HC100006597310","customerOrderId":"W838207358","
RESULT
Match 1     
Full match  customerOrderId":"W838207358"," 
Group 1.    W838207358
******************* Big Query ******************
SELECT timestamp, jsonpayload._userid_, jsonpayload.response, 
 -- REGEXP_EXTRACT(jsonPayload.response, r'\"customerOrderId\":\"(.*?)\","')  as CustomerOrderID,    ## All 3 of these work 
 -- REGEXP_EXTRACT(jsonPayload.response, r"customerOrderId\":\"(.*?)\",")     as CustomerOrderID  
    REGEXP_EXTRACT(jsonPayload.response, r"customerOrderId\":\"([^\"]*)\".*") as CustomerOrderID  
FROM `exported_logs_v2.mcc_checkout_service_servicelog_201906*`
   where jsonpayload.component like '%CO_ORDER_SUMMARY%'   ##'%CO_ORDER_SUMMARY%'  or   '%CO_SECURE_LOGON%'
     and ( _TABLE_SUFFIX between "23" and "23" )
     and   jsonPayload._userid_ = "0516CFC3D4B001FB0S" 
 order by timestamp asc