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

如何在C#中提取以#开头和结尾的子字符串?

在C#中提取被#包裹的子字符串

下面提供两种实用的解决方案,覆盖不同场景需求:

方法一:使用正则表达式(推荐,适合大多数场景)

正则表达式可以快速匹配所有符合#内容#格式的子串,直接提取中间的内容。使用(?<=#)[^#]+(?=#)这个模式,其中:

  • (?<=#):正向回顾断言,确保匹配内容前面是#
  • [^#]+:匹配任意非#的字符(至少一个)
  • (?=#):正向前瞻断言,确保匹配内容后面是#

示例代码:

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string input = "这是一段包含#测试内容#和#另一个示例#的长字符串";
        // 匹配所有被#包裹的内容
        MatchCollection matches = Regex.Matches(input, @"(?<=#)[^#]+(?=#)");
        
        foreach (Match match in matches)
        {
            Console.WriteLine(match.Value); // 输出:测试内容、另一个示例
        }
    }
}

如果只需要提取第一个符合条件的子串,用Regex.Match代替Matches,判断Success后获取Value即可。

方法二:手动遍历字符串(无需依赖正则,适合简单场景或需自定义逻辑)

通过字符串索引定位#的位置,手动截取中间内容,适合需要更精细控制的场景(比如处理不规范的配对情况)。

示例代码:

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        string input = "示例#第一个内容#字符串#第二个内容#结束";
        List<string> results = new List<string>();
        
        int startIndex = 0;
        while (true)
        {
            // 找到第一个#的位置
            int openHash = input.IndexOf('#', startIndex);
            if (openHash == -1) break;
            
            // 找当前#后面的下一个#
            int closeHash = input.IndexOf('#', openHash + 1);
            if (closeHash == -1) break;
            
            // 提取中间内容(不包含#)
            string content = input.Substring(openHash + 1, closeHash - openHash - 1);
            results.Add(content);
            
            // 更新起始位置,继续查找下一组
            startIndex = closeHash + 1;
        }
        
        foreach (string item in results)
        {
            Console.WriteLine(item); // 输出:第一个内容、第二个内容
        }
    }
}

注意事项

  • 如果存在嵌套的#(比如#外层#内层#),两种方法都会提取外层,若需处理嵌套逻辑需额外调整。
  • 若字符串中存在单个未配对的#,两种方法都会自动忽略,避免抛出异常。

内容的提问来源于stack exchange,提问作者vijay.malhi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:38:13