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

C#中如何分割含#开头标识的字符串并保留对应标识内容

C# 按#标签拆分字符串并保留标签的实现方案

问题说明

输入字符串固定由两段内容拼接而成,每段对应一个#开头的标签词,示例输入输出规则如下:

  • 输入:one two three #abc four five six #xyz
  • 预期输出:
    • 第一段:one two three #abc
    • 第二段:four five six #xyz
  • 原有错误代码输出:
    • data1:one two three(丢失对应#abc标签)
    • data2:four five six(丢失对应#xyz标签)

原有代码的问题:

  1. Substring(0,input.IndexOf('#'))只截取到第一个#符号的前一位,直接把#abc标签排除在了截取范围外
  2. Regex.Split(input, @"(?<!\w)#\w+")会将正则匹配到的#标签作为分隔符直接丢弃,因此拆分结果不会包含标签内容

正确实现代码

方案1:纯字符串查找(性能最优,推荐)

无需依赖正则,直接定位第二个#标签的位置完成拆分即可:

string input = "one two three #abc four five six #xyz";
string data1 = string.Empty;
string data2 = string.Empty;

// 先定位第一个#的位置,再从该位置往后查找第二个#的位置作为拆分点
int firstTagPos = input.IndexOf('#');
int splitPos = input.IndexOf('#', firstTagPos + 1);

if (splitPos > -1)
{
    // 截取到拆分位置前,去除末尾多余空格
    data1 = input.Substring(0, splitPos).TrimEnd();
    // 从拆分位置截取到字符串末尾即为第二段
    data2 = input.Substring(splitPos);
}

Console.WriteLine("output1 - " + data1);
Console.WriteLine("output2 - " + data2);

方案2:正则匹配定位

如果需要兼容标签前后存在特殊字符的场景,可以通过正则匹配所有#标签的位置再做拆分:

using System.Text.RegularExpressions;

string input = "one two three #abc four five six #xyz";
string data1 = string.Empty;
string data2 = string.Empty;

MatchCollection tags = Regex.Matches(input, @"#\w+");
if (tags.Count >= 2)
{
    int splitPos = tags[1].Index;
    data1 = input.Substring(0, splitPos).TrimEnd();
    data2 = input.Substring(splitPos);
}

Console.WriteLine("output1 - " + data1);
Console.WriteLine("output2 - " + data2);

两种方案运行后均输出符合预期的结果:

output1 - one two three #abc
output2 - four five six #xyz

内容的提问来源于stack exchange,提问作者krishna mohan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 22:24:18