【发布时间】:2019-03-14 17:04:50
【问题描述】:
我需要解析一个如下所示的字符串:
"prefix 'field1', '', 'field2', 'field3', 'select ... where (column1 = '2017') and ((('literal1', 'literal2', 'literal3', 'literal4', 'literal5', 'literal6', 'literal7') OVERLAPS column2 Or ('literal8') OVERLAPS column3 And (column4 > 0.0 Or column6 > 0.0)) And column7 IN_COMMUNITY [int1] And column5 = 'literal9') LIMIT 0 ', 'field5', 'field6', 'field7', 'field8', 'field9', '', 'field10'"
我想得到如下列表:
['field1', '', 'field2', 'field3', 'select ... where (column1 = '2017') and ((('literal1', 'literal2', 'literal3', 'literal4', 'literal5', 'literal6', 'literal7') OVERLAPS column2 Or ('literal8') OVERLAPS column3 And" (column4 > 0.0 Or column6 > 0.0)) And column7 IN_COMMUNITY [int1] And column5 = 'literal9') LIMIT 0 ', 'field5', 'field6', 'field7', 'field8', 'field9', '', 'field10']
我用正则表达式试过了,但在伪SQL语句的子字符串中不起作用。
我怎样才能得到这份清单?
【问题讨论】:
-
当您将底部示例放入脚本时,它没有正确终止,所以我不知道您想如何将其切碎。 'column3 And' 后面还有一个流氓 " 表示有 3 个双引号。这些应该如何排列?
-
我修复了字符串。我想得到一个列表,其中字符串中的每个字段都是列表中的一个字段,包括子字符串以 select 开头并以 LIMIT 0 结尾。
-
SQL 部分是否正确?它包含
OVERLAPS column3 And"中的流氓报价。另外,字段的数量是恒定的吗? -
如果输入字符串包含 arbitratry sql 语句,我认为这是不可能的,因为这些语句可能包含任意数量的嵌入式引号和逗号。
-
如果字段数不变,可以将查询左侧的字段和右侧的字段提取出来,剩下的就是sql查询了。
标签: python quotes string-parsing