【发布时间】:2010-07-09 15:45:18
【问题描述】:
我希望将这些类型的字符串解析为 Python 中的列表:
"a,b,c",d,"e,f" => ['a','b','c'] , ['d'] , ['e','f']
"a,b,c",d,e => ['a','b','c'] , ['d'] , ['e']
a,b,"c,d,e,f" => ['a'],['b'],['c','d','e','f']
a,"b,c,d",{x(a,b,c-d)} => ['a'],['b','c','d'],[('x',['a'],['b'],['c-d'])]
它嵌套了,所以我怀疑正则表达式已经过时了。我能想到的就是开始计算引号和括号来解析它,但这似乎非常不雅。或者可能首先匹配引号并用 somechar 替换它们之间的逗号,然后用逗号分割,直到所有嵌套完成,最后在 somechar 上重新分割。
有什么想法吗?
【问题讨论】:
-
看起来你需要一个解析器生成器。不过我不知道 Python 的。
-
有一堆Python解析器生成器:nedbatchelder.com/text/python-parsers.html
-
你到底怎么称呼'嵌套'。给定示例中是否已经存在嵌套?否则,引号必须以某种方式在嵌套结构中进行转义。
-
你在那里输入了一个漂亮的、不合逻辑的数据输入——如果你的输出必须看起来相对丑陋(特别是最后一种情况)——我认为不可能有“优雅”的解决方案。弄脏你的手,然后自己解析。使用状态变量来知道你正在解析的字符是什么,等等......应该在 Python 中的 30-50 行解析器中运行(不使用任何解析器生成器或其他东西)
-
为什么最后一个例子中的
c-d变成['c-d']而不是['c','-','d']?如果它也是顶级的,会是这样吗?