Python 用于将字符串匹配到查询列表的正则表达式

Python 用于将字符串匹配到查询列表的正则表达式,python,regex,Python,Regex,我有一个查询结果字符串作为输入和sql查询列表 我想检查结果字符串是否可以作为哪个sql查询的输出 例如: 结果字符串 val = 15.1a 查询列表: ["select * from table where val like "15%", "select * from table where val in ("15.1a", "15.1b"), "select * from table where val = "15.1", "select * from

我有一个查询结果字符串作为输入和sql查询列表

我想检查结果字符串是否可以作为哪个sql查询的输出

例如:

结果字符串

val = 15.1a
查询列表:

  ["select * from table where val like "15%",
     "select * from table where val in ("15.1a", "15.1b"),
     "select * from table where val = "15.1",
     "select * from table where val != "15",
     "select * from table where val = "18",
    ]
在这里你可以看到,如果我运行0,1,3索引查询,它将给出结果字符串

有没有什么方法可以在python中实现这一点。 我不想使用sql引擎,而不是我正在寻找一些正则表达式可以这样做

谢谢

import re

val = r'^.*15.1.*,'
text = ' "select * from table where val in ("15.1a", "15.1b"),  select * from table where val = "15.1",'

print (re.findall(val, text))
出去

出去

有趣的问题:

进口稀土 查询列表=[ 从val类似于“15.1%”的表格中选择*, 从“15.1a”、“15.1b”中val所在的表格中选择*, 从val='15.1'的表中选择*, 从val!=“15”所在的表格中选择*, 从val='18'的表中选择*, ] 模式仅捕获比较中使用的值 类似“%some%value”的val将返回str%some%value,但不带引号 操作={ “like”:r.**:val\slike\s+'.*?:'.*, 'in':r.**:val\s+in\s+\.?:\, '=':r.*::val\s+=\s+'.*?:'.*, “!=”:r.*::val\s+\!=\s+'.*?:'.*, } 有效的_查询=[] val='15.1a' 对于查询列表中的查询: 对于op,operations.items中的模式: m=re.matchpattern,查询 如果m: 比较_值=m.groups0[0] 如果op=='like': 这里我们使用带有非贪婪运算符的正则表达式 pcomparing_value=r'{}'。格式比较_value。替换''%1!'',''%2!'' 如果re.matchpcomparing_值,则val: 有效的\u query.appendquery 不带引号的比较值必须相等 elif op='='和val==比较_值: 有效的\u query.appendquery 不带引号的比较值不能相等 elif op=='!='还有瓦尔比较_值: 有效的\u query.appendquery 对于in运算符,也将val与引号进行比较 elif op==“in”和“{}”。比较_值时的formatval: 有效的\u query.appendquery printvalid\u查询 val的输出='15.1a':

val='15'的输出为[]

val='18'的输出为:

有趣的问题:

进口稀土 查询列表=[ 从val类似于“15.1%”的表格中选择*, 从“15.1a”、“15.1b”中val所在的表格中选择*, 从val='15.1'的表中选择*, 从val!=“15”所在的表格中选择*, 从val='18'的表中选择*, ] 模式仅捕获比较中使用的值 类似“%some%value”的val将返回str%some%value,但不带引号 操作={ “like”:r.**:val\slike\s+'.*?:'.*, 'in':r.**:val\s+in\s+\.?:\, '=':r.*::val\s+=\s+'.*?:'.*, “!=”:r.*::val\s+\!=\s+'.*?:'.*, } 有效的_查询=[] val='15.1a' 对于查询列表中的查询: 对于op,operations.items中的模式: m=re.matchpattern,查询 如果m: 比较_值=m.groups0[0] 如果op=='like': 这里我们使用带有非贪婪运算符的正则表达式 pcomparing_value=r'{}'。格式比较_value。替换''%1!'',''%2!'' 如果re.matchpcomparing_值,则val: 有效的\u query.appendquery 不带引号的比较值必须相等 elif op='='和val==比较_值: 有效的\u query.appendquery 不带引号的比较值不能相等 elif op=='!='还有瓦尔比较_值: 有效的\u query.appendquery 对于in运算符,也将val与引号进行比较 elif op==“in”和“{}”。比较_值时的formatval: 有效的\u query.appendquery printvalid\u查询 val的输出='15.1a':

val='15'的输出为[]

val='18'的输出为:


你想在这里实现什么?正则表达式可能不是这个工作的合适工具。我只想得到一个查询列表,它可以在不使用sql的情况下给我结果字符串。@DeepSpace任何其他python工具都可以帮助你。你对val只有一个条件,或者你的查询列表比这更复杂吗?你想实现什么这里?Regex可能不是这个工作的合适工具。我只想得到一个查询列表,它可以在不使用sql的情况下为我提供结果字符串。@DeepSpace任何其他python工具都可以帮助您。您对val只有一个条件,或者您的查询列表比这更复杂吗?这里我们搜索的是15.1a,预期的输出是索引值在0,1,3时,我们正在搜索15.1a,预期输出为索引为0,1,3的值。这就是我想要实现的:谢谢你,伙计。这就是我想要实现的:
[' "select * from table where val in ("15.1a", "15.1b"),  select * from table where val = "15.1",']
["select * from table where val like '15.1%'", "select * from table where val in ('15.1a', '15.1b')", "select * from table where val != '15'"]
 ["select * from table where val != '15'", "select * from table where val = '18'"]