将以下语句作为字符串给定
stmt = "insert into table (col1, col2, col3) values (100, '() string with parantheses ()', 2.3);"
字符串
我试图找到一个正则表达式(或者其他更好的方法)将该字符串拆分为一个列表["(col1, col2, col3)", "(100, '() string with parantheses ()', 2.3)"]
,以便稍后可以用列名和值填充一个字典
d = { "col1" : "100", "col2" : "'() string with parantheses ()'", "col3" : "2.3" }
型
到目前为止,我有下面的解决方案,我不喜欢(或者更确切地说,我相信有一个解决方案使用正则表达式只做同样的事情)。
re.findall("\([^\r\n]*\)", stmt)[0].split("values")
# from here on I would have to parse the two strings and fill a dict
型
我无法找到一个解决方案,我不必使用正则表达式将字符串拆分为'values'
。我的主要问题是,第二个parantheses字符串的值可能包含parantheses本身的字符串。
5条答案
按热度按时间i1icjdpr1#
如果你的语句总是使用相同的格式,你可以使用一些基本的字符串操作和
ast.literal_eval
来计算值。请注意,这也将以int,str和float类型的值结束。字符串
这会给予你:
型
mcvgt66p2#
为什么要和这些丑陋的黑客搞在一起?让SQL解析SQL。下面是一个完整的程序,可以将任何insert语句转换为元组:
字符串
当然,您可能还想考虑将数据实际存储在数据库中,而不是现在计划使用它们做什么。在这种情况下,在建立连接时使用文件名而不是
":memory:"
,您将获得持久存储。tkqqtvp13#
好吧,这并不漂亮,但假设你处理的字符串总是一个插入语句(基于它们的特征),这应该可以工作:
字符串
如果你有其他的插入语句,请尝试这个,并告诉我它是否有效。- 谢谢-谢谢
gwbalxhn4#
如果你真的想这样做,你的正则表达式最终会因为 * Assert表达式 * 而变得复杂:
不必按'values'拆分字符串
字符串
为了保证正确性,您应该使用SQL解决方案
jv2fixgn5#
使用吹代码并享受它。
字符串
输出:
型