regex - 用逗号解析字符串到 dict
问题描述
我有一个如下所示的输入字符串。我想根据逗号将其解析为如下所示的输出。问题是有时括号内包含逗号,如下例所示,引号内也包含引号。我对正则表达式匹配不太方便,因此非常感谢任何提示。
输入:
"ty_event_name, from_unixtime(unix_timestamp(regexp_replace(ty_date,'/','-'),'MM-dd-yyyy'),'yyyy-MM-dd') as ty_date,'${hiveconf:run_dt}' as sessions_fy,orders_xy"
输出:
{1:'ty_event_name',
2:'from_unixtime(unix_timestamp(regexp_replace(ty_date,'/','-'),'MM-dd-yyyy'),'yyyy-MM-dd') as ty_date',
3:''${hiveconf:run_dt}' as sessions_fy',
4:'orders_xy'}
试过:
import pandas as pd
import numpy as np
import re
teststr="ty_event_name, from_unixtime(unix_timestamp(regexp_replace(ty_date,'/','-'),'MM-dd-yyyy'),'yyyy-MM-dd') as ty_date,'${hiveconf:run_dt}' as sessions_fy,orders_xy"
tstr=re.sub('(?!\B"[^"]*),(?![^"]*"\B)',',',teststr).split()
tstr
输出:
['ty_event_name,',
"from_unixtime(unix_timestamp(regexp_replace(ty_date,'/','-'),'MM-dd-yyyy'),'yyyy-MM-dd')",
'as',
"ty_date,'${hiveconf:run_dt}'",
'as',
'sessions_fy,orders_xy']
解决方案
看起来它成功了:
代码:
re.split(r',\s*(?=[^)]*(?:\(|$))', teststr)
输出:
['ty_event_name',
"from_unixtime(unix_timestamp(regexp_replace(ty_date,'/','-'),'MM-dd-yyyy'),'yyyy-MM-dd') as ty_date",
"'${hiveconf:run_dt}' as sessions_fy",
'orders_xy']
推荐阅读
- python - IntegrityError:UNIQUE 约束失败:theatre_audience.ticketId
- output - 如何正确读取 VHDL 中的“部分未定义”信号
- php - 在 codeigniter 中使用 base_url 自动调用图像名称
- accessibility - 使用 pa11y 的命令行界面时不断收到超时错误和“taskkill”
- swift - 将 RealmSwift 数据迁移到 Core Data,移除 RealmSwift 依赖?
- javascript - 是否可以使用 js 生成 csrf 令牌并使用 php 进行验证?
- json - MariaDB 查询列到 JSON
- hadoop - 使用 hadoop 时无法打开 localhost:8088
- c++ - C ++ CLion为容器提供不同大小?
- python - 使用带有列表框的单击事件在 python tkinter 中显示图像