如果我有这样的字符串
"{ partner_name = test_partner}" OR " { partner_name : test_partner }
它的示例字符串将非常复杂,其中包含几个特殊字符,如=,{,}
将其转换为python对象的最佳方法是什么?这样我就可以处理它了。
我尝试了eval,但它要求字符串使用“‘”,但是我们如何在每个单词的开头和结尾添加这个特殊字符\’呢?我尝试了常规的express re.findal('\w+'),但当我的字符串包含‘_’或类似字符时,它会失败,因为它会用‘_’分隔字符串
这个问题的对象是我的应用程序需要,用户友好的语言作为输入-我认为Json Dict会很好-但用户懒惰地在每个字符串的前后加上“‘”……
然后我想到了yaml,但它也很复杂,如果有人可以建议更好的用户友好的输入,我使用的python对象-那么请帮助我。
发布于 2010-05-07 17:29:39
如果YAML对于您的用户来说太复杂,您也许应该考虑为他们提供一个结构化的输入表单,并从那里正确地格式化数据。YAML非常容易编写来指定结构,当然比花括号语法更容易。
发布于 2010-05-07 17:04:38
修复输入将是最好的解决方案。
但是,您可以跳过一系列障碍,尝试通过json
使输入成为parsable。这是脆弱的,因为您的输入并不完全是json,而不同的输入很容易打破这一点(尽管相对于平淡无奇地使用eval
,我仍然认为它是首选)。
>>> import json
>>> s = '{ partner_name = test_partner}'
>>> t = s.replace(' ', '') # strip whitespace
>>> t = t.replace('=', '":"')
>>> t = t.replace('{','{"')
>>> t = t.replace('}','"}')
>>> json.loads(t)
{u'partner_name': u'test_partner'}
发布于 2010-05-07 17:05:55
如果是一些外部数据,请不要对其使用eval()
!如果你想正确地解析它,可以看看一些解析库。使用解析组合子的解析器非常好--例如https://github.com/pyparsing/pyparsing,或者可能是一个peg解析器:http://fdik.org/pyPEG/
https://stackoverflow.com/questions/2787303
复制相似问题