我有一个数据表单项目,我需要提取.sqlx文件的配置块,并将其解析为Python字典。
我正在尝试使用RegEx。
RegEx:config\s*{[^}]*}
import re
config_pattern = r'config\s*{[^}]*}'
config_match = re.search(config_pattern, sql_content, re.DOTALL)
if config_match:
config_block = config_match.group(0)
print(config_block)
else:
print("Config block not found.")
输入:
config {
type:"table",
schema:"xt_pto",
name:"xt_daily_pto",
bigquery:{
partitionBy:"BKDate"
},
tags:[
"xt_daily_pto",
"budget"
]
}
WITH latest_date AS (
SELECT MAX(dt) dt
FROM ${ref('xt_daily_pto')}
)
SELECT ... -- Rest of my query
期望输出:
{
"type":"table",
"schema":"xt_pto",
"name":"xt_daily_pto",
"bigquery":{
"partitionBy":"BKDate"
},
"tags":[
"xt_daily_pto",
"budget"
]
}
但是RegEx config\s*{[^}]*}
匹配bigquery键的第一个}
,输出被截断:
{
type:"table",
schema:"xt_pto",
name:"xt_daily_pto",
bigquery:{
partitionBy:"BKDate"
}
1条答案
按热度按时间guicsvcw1#
我发现this question关于一个类似的regex问题。
修改curlies,允许它们为空,并添加“config”:
现在这不会被解析为一个实际的python dict,因为名称周围没有引号。我想这样的方法可能会奏效:
不幸的是,我不是很精通正则表达式,所以我不会尝试为你做这个,但我敢打赌,你可以想出一些东西:)