You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用正则表达式(Regex)分割SQL查询语句结果异常,求解决

解决正则分割SQL语句出现多余空白元素的问题

问题原因

你的正则表达式[;!]+?仅匹配分号/感叹号作为分割符,但分割后会保留这些符号前后的空白字符(比如换行、空格)。原字符串末尾的;\n被分割后,分号被移除,剩下的换行符\n就成了结果列表里的最后一个多余元素。

解决方法

方法1:分割后过滤空白元素

分割完成后,用列表推导式过滤掉纯空白或空的元素,同时对每个SQL语句去除首尾空白:

import re

queries ="""
INSERT ignore into persons VALUES (15,'Tom D.', 'Erilchsen', 
'Skagen 21', 'Erlangen');
select * from persons;
"""

regex = "[;!]+?"
y = re.split(regex ,queries)
# 过滤并清理每个元素
clean_queries = [q.strip() for q in y if q.strip()]
print(clean_queries)
print(len(clean_queries))

运行输出:

["INSERT ignore into persons VALUES (15,'Tom D.', 'Erilchsen', 'Skagen 21', 'Erlangen')", 'select * from persons']
2

方法2:改进正则表达式,同时匹配分割符前后的空白

修改正则,让它匹配分割符(;或!)以及前后的空白字符,这样分割时会直接把这些空白一并处理:

import re

queries ="""
INSERT ignore into persons VALUES (15,'Tom D.', 'Erilchsen', 
'Skagen 21', 'Erlangen');
select * from persons;
"""

# 匹配分号/感叹号,前后可带任意空白(换行、空格等)
regex = r"\s*[;!]+\s*"
y = re.split(regex ,queries.strip())  # 先去除字符串首尾的空白
# 过滤可能的空元素
clean_queries = [q for q in y if q]
print(clean_queries)

运行输出同样会得到干净的两条SQL语句。

注意事项

如果你的SQL语句中存在字符串内的分号(比如INSERT ... VALUES ('abc;def')),这种简单的分割方式会出错,此时需要更复杂的正则来处理SQL语法中的字符串、注释等情况,或者使用专门的SQL解析库(如sqlparse)来更可靠地分割语句。

内容的提问来源于stack exchange,提问作者asheer ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 15:25:17