Разобрать строку запятой, чтобы диктовать

У меня есть входная строка, подобная показанной ниже. Я хотел бы разобрать его на основе запятых в 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']

person user3476463    schedule 21.12.2018    source источник
comment
Пожалуйста, покажите нам, что вы пробовали, чтобы мы могли адаптировать наши ответы к тому, на каком этапе процесса вы уже находитесь. Запросы кода обычно не привлекают много качественных ответов. Обычно вы получаете то, что ищете, быстрее, если включаете больше контекста, особенно код, который вы уже пробовали, с объяснением, почему он не соответствует вашим потребностям.   -  person JDB still remembers Monica    schedule 21.12.2018
comment
Возможный дубликат Regex найти запятую не внутри кавычек   -  person Nick    schedule 21.12.2018
comment
@Nick Я добавил обновления, чтобы сделать форматирование ввода более четким, и добавил кое-что, что я пробовал на основе предложенного вами комментария. Я не думаю, что это то же самое, что и ваше предложение, потому что проблема не только в кавычках. Основная проблема заключается в разделении строки на запятые, которые находятся за пределами круглых скобок.   -  person user3476463    schedule 22.12.2018


Ответы (1)


Похоже, это помогло:

код:

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']
person user3476463    schedule 21.12.2018