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

如何使用正则表达式拆分含多条select语句的SQL文本 去除末尾分号

解决方案

问题原因

你使用的拆分正则@";\s+\n"仅能匹配分号+空白字符+换行的组合,最后一条SQL语句的结尾是分号+文件结束符,没有后续换行,无法触发拆分逻辑,因此分号会被保留在最后一条语句的末尾。

推荐实现方案

方案1:调整拆分正则(改动最小)

修改拆分正则为@";\s*(?:\n|$)",既可以匹配分号后接换行的场景,也可以匹配分号后接文件结束的场景,拆分后过滤空串即可:

var sqlStatements = Regex.Split(sqlS, @";\s*(?:\n|$)")
    .Where(s => !string.IsNullOrWhiteSpace(s))
    .ToList();

方案2:使用正则匹配(更精准,容错性更高)

直接通过正则提取所有符合规则的SELECT语句,天然规避拆分带来的边界问题,不需要额外处理分号:

// 正则开启多行模式,逐行匹配以select开头、分号结尾的语句,直接提取分号前的内容
var matches = Regex.Matches(sqlS, @"^\s*(select.*?)\s*;\s*$", RegexOptions.Multiline | RegexOptions.Singleline);
var sqlStatements = matches.Cast<Match>()
    .Select(m => m.Groups[1].Value)
    .ToList();

两种方案最终得到的sqlStatements列表中的每一条语句都不会携带末尾分号,符合需求。

内容的提问来源于stack exchange,提问作者Zita Kemeny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:27:01