【问题标题】:Parse String by comma to dict用逗号解析字符串到 dict
【发布时间】:2018-12-21 19:50:41
【问题描述】:

我有一个如下所示的输入字符串。我想根据逗号将其解析为如下所示的输出。问题是有时括号内包含逗号,如下例所示,引号内也包含引号。我对正则表达式匹配不太方便,因此非常感谢任何提示。

输入:

"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']

【问题讨论】:

  • 请向我们展示您的尝试,以便我们根据您在此过程中所处的位置调整我们的答案。对代码的请求往往不会吸引很多高质量的答案。如果您包含更多上下文,通常会更快地获得您正在寻找的内容,尤其是您已经尝试过的代码,并解释了它为什么不适合您的需求。
  • @Nick 我添加了更新以使输入的格式更清晰,并根据您的建议添加了一些我尝试过的评论。我认为这与您的建议不完全相同,因为问题不仅仅是引号。主要问题是用括号外的逗号分隔字符串。

标签: regex python-3.x pandas numpy


【解决方案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']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 2011-02-20
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    相关资源
    最近更新 更多