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

以加号为分隔符拆分含加号的字符串问题求助

解决带加号字符串的拆分问题

嘿,我一眼就看出你遇到的问题了——你用Regex.Split拆分字符串时直接用了+作为分隔符,但+是正则表达式里的特殊元字符(表示前面的匹配项出现1次或多次),直接用它会导致正则引擎抛出语法异常,这就是你看到错误的原因。

下面给你两种简单的解决方案,按需选择:

方案一:修正正则表达式(转义加号)

既然要用正则拆分,就得把特殊的+转义成普通字符。在正则里,我们用\+表示实际的加号,而在C#字符串里,如果不用@逐字字符串的话,反斜杠还需要再转义一次,所以推荐用@"\+"来写正则模式,更清晰。

修改后的代码:

string ColumnPlusLevel = "+-J10+-J10+-J10+-J10+-J10";
string strpluslevel = ColumnPlusLevel;
// 转义加号,让正则匹配实际的+字符
string[] strpluslevel_lines = Regex.Split(strpluslevel, @"\+");
string strpluslevel_summa = "";
foreach (string line in strpluslevel_lines) {
    MessageBox.Show(line);
    strpluslevel_summa += line;
}
MessageBox.Show(strpluslevel_summa, "summa sumarum");

方案二:用string.Split替代正则(更简单高效)

如果只是单纯按加号拆分字符串,完全没必要动用正则——string.Split可以直接处理普通字符分隔,不需要考虑正则特殊字符的问题,性能也更好。

代码示例:

string ColumnPlusLevel = "+-J10+-J10+-J10+-J10+-J10";
string strpluslevel = ColumnPlusLevel;
// 直接传入+字符作为分隔符
string[] strpluslevel_lines = strpluslevel.Split('+');
string strpluslevel_summa = "";
foreach (string line in strpluslevel_lines) {
    MessageBox.Show(line);
    strpluslevel_summa += line;
}
MessageBox.Show(strpluslevel_summa, "summa sumarum");

额外优化:移除空字符串

注意原字符串开头就是+,所以拆分后数组的第一个元素是空字符串,会弹出一个空的消息框。如果不想处理空元素,可以给Split加上StringSplitOptions.RemoveEmptyEntries参数:

// 拆分时自动移除空条目
string[] strpluslevel_lines = strpluslevel.Split(new char[] {'+'}, StringSplitOptions.RemoveEmptyEntries);

这样循环里就只会显示-J10这些有效内容了。

内容的提问来源于stack exchange,提问作者Tomas Nordström

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:54:30