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

C#中使用~分割字符串结果不符的技术求助

解决C#中按~分割字符串并保留指定元素前缀的问题

你的问题在于用Split结合RemoveEmptyEntries时,不仅会去掉连续~产生的空项,还会把分隔符~本身完全丢弃,所以得到的结果都是不带~的内容。要实现你期望的输出,可以试试这两种方法:

方法一:分割后手动为指定元素添加~

如果确定前两个元素需要带~,后面的保持原样,这种方法直接易懂:

string spl = "~ALLERGIST~~ALLERGIST345~Add Specialty~ALLERGIST";
// 先分割并过滤空项,得到原始的四个元素
var rawElements = spl.Split('~').Where(item => !string.IsNullOrEmpty(item)).ToList();

var elements = new List<string>();
for (int i = 0; i < rawElements.Count; i++)
{
    // 前两个元素添加~前缀,其余保持原样
    if (i < 2)
    {
        elements.Add($"~{rawElements[i]}");
    }
    else
    {
        elements.Add(rawElements[i]);
    }
}

// 后续处理逻辑
foreach (string item in elements)
{
    cmb.Items.FindItemByValue(item).Checked = true;
}

运行后elements的内容就是:

  • ~ALLERGIST
  • ~ALLERGIST345
  • Add Specialty
  • ALLERGIST

方法二:用正则表达式精准匹配(更灵活)

如果你的字符串结构是:带~前缀的元素是被1个或多个~开头的,而不带~的是单个~开头的普通内容,可以用正则来直接提取符合要求的项:

using System.Text.RegularExpressions;

string spl = "~ALLERGIST~~ALLERGIST345~Add Specialty~ALLERGIST";
// 匹配两种模式:1个/多个~后跟非~字符;单个~后跟非~字符
var matches = Regex.Matches(spl, @"(~{1,2}[^~]+)|~([^~]+)");

var elements = new List<string>();
foreach (Match match in matches)
{
    if (match.Groups[1].Success)
    {
        // 对于多~开头的项,只保留一个~前缀
        elements.Add($"~{match.Groups[1].Value.TrimStart('~')}");
    }
    else if (match.Groups[2].Success)
    {
        // 单个~开头的项,去掉~前缀
        elements.Add(match.Groups[2].Value);
    }
}

// 后续处理逻辑
foreach (string item in elements)
{
    cmb.Items.FindItemByValue(item).Checked = true;
}

这种方法更灵活,哪怕字符串结构变化(比如前三个元素是多~前缀),只要调整正则或判断逻辑就能适配。

另外提个小优化:你的原始代码里Convert.ToString(spl)是多余的,因为spl本身就是string类型,直接用就行啦。

内容的提问来源于stack exchange,提问作者Rahul Aggarwal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:39:58