Python 用于将字符串匹配到查询列表的正则表达式
我有一个查询结果字符串作为输入和sql查询列表 我想检查结果字符串是否可以作为哪个sql查询的输出 例如: 结果字符串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
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'"]