解析python

时间:2016-11-30 21:03:00

标签: python parsing

我希望能够获取如下所示的字符串并拉出第一个参数(id),然后使用它来打印出来。我一直在考虑拆分python,但我通常需要拆分2到3次才能获得可用的东西。

以下是我尝试解析的字符串示例:

EntryError(u"(sqlite3.IntegrityError) UNIQUE constraint failed:
role.name, role.domain_id [SQL: u'INSERT INTO table1 (id, name, 
domain_id, extra) VALUES (?, ?, ?, ?)'] [parameters: ('id', 
'fake1name', '<<null>>', '{}')]",)

我尝试过这样的事情:

e = e.split("\'")
e = e.split(",")

但这给了我奇怪的字符串,必须进一步解析。是否有更简单的方法可以始终从id提取"[parameters: ('id', 'fake1name', '<<null>>', '{}')]"

这是我的代码:

except exception.EntryError as e:   

    query = str(e)
    # example of me using split to try and reduce the string
    parsedstr = query.split("[")
    parsedstr = parsedstr.split("\'")

    # This will give me id like I want but it doesn't seem efficient
    # prints: id
    print parsedstr[1]

1 个答案:

答案 0 :(得分:1)

您可以使用正则表达式。

import re

...

except exception.EntryError as e:
    print re.search("\[parameters: \('([^']+)", str(e)).group(1)

这会在第一次出现[parameters: ('时搜索异常字符串,并从该点开始匹配,直到它到达'