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

C#如何提取字符串中两个指定字符串间的所有匹配内容

提取字符串中所有STRING与END之间内容的方法

嘿,我来帮你解决这个提取多个匹配项的问题~你之前的代码只能拿到第一个结果,是因为用了IndexOf(定位第一个STRING)和LastIndexOf(定位最后一个END),这样会把中间所有内容都裹进去,没法拆分出多组配对的内容。这里给你两种靠谱的解决办法:

方法一:用正则表达式(最简洁高效)

正则可以轻松捕获所有符合STRING...END模式的内容,代码量少还灵活。你需要用到System.Text.RegularExpressions命名空间里的Regex.Matches方法,它会返回所有匹配的结果。

完整代码示例

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string myString = "This is STRING a222 END, and this is STRING b2838 END.";
        // 正则模式解析:
        // STRING:匹配起始标记
        // \s*:匹配标记和内容之间可能存在的空格(可选)
        // (.*?):非贪婪捕获中间的内容,确保只匹配到最近的END为止
        // \s*END:匹配结束标记,同样允许中间有空格
        string pattern = @"STRING\s*(.*?)\s*END";
        
        MatchCollection matches = Regex.Matches(myString, pattern);
        
        // 遍历所有匹配项,提取我们需要的内容
        foreach (Match match in matches)
        {
            string extractedContent = match.Groups[1].Value.Trim(); // Trim去掉多余空格
            Console.WriteLine(extractedContent);
        }
    }
}

运行这段代码会输出:

a222
b2838

方法二:循环查找标记(不用正则)

如果你不想依赖正则,也可以通过循环逐个查找STRING和对应的END位置,手动提取内容:

完整代码示例

using System;

class Program
{
    static void Main()
    {
        string myString = "This is STRING a222 END, and this is STRING b2838 END.";
        string startMarker = "STRING";
        string endMarker = "END";
        int currentSearchIndex = 0;

        while (currentSearchIndex < myString.Length)
        {
            // 找下一个STRING的位置
            int startPos = myString.IndexOf(startMarker, currentSearchIndex);
            if (startPos == -1) break; // 没有更多STRING了,退出循环
            
            // 计算内容的起始位置(STRING之后)
            int contentStart = startPos + startMarker.Length;
            // 找当前STRING后面最近的END位置
            int endPos = myString.IndexOf(endMarker, contentStart);
            if (endPos == -1) break; // 找不到对应的END,退出
            
            // 提取内容并去掉前后空格
            string extractedContent = myString.Substring(contentStart, endPos - contentStart).Trim();
            Console.WriteLine(extractedContent);
            
            // 更新搜索起始位置,从当前END的下一个字符开始
            currentSearchIndex = endPos + endMarker.Length;
        }
    }
}

这个方法的逻辑很直观:每次找到一个STRING后,就找它后面最近的END,提取内容后把搜索起点移到这个END后面,继续找下一组配对,直到找不到更多STRING为止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 21:02:40