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

如何提取相同首尾标识符间的子字符串?IndexOf/Split方法遇困

解决双引号间内容提取的问题

嘿,这个场景我太熟了!其实不用纠结,有好几种简单靠谱的办法能搞定你这个需求——从.0.label unicode "Area - 110"里精准提取双引号之间的文本。

方法一:用IndexOf指定起始位置(最直观)

你之前担心IndexOf会返回相同值,其实只要用它的重载方法,指定第二个引号的搜索起始位置就行,完全不会重复匹配第一个引号:

string input = @".0.label unicode ""Area - 110"" ";
// 找到第一个双引号的索引
int firstQuoteIndex = input.IndexOf('"');
if (firstQuoteIndex != -1)
{
    // 从第一个引号的下一个位置开始找第二个引号
    int secondQuoteIndex = input.IndexOf('"', firstQuoteIndex + 1);
    if (secondQuoteIndex != -1)
    {
        // 截取两个引号之间的内容
        string extractedText = input.Substring(firstQuoteIndex + 1, secondQuoteIndex - firstQuoteIndex - 1);
        Console.WriteLine(extractedText); // 输出:Area - 110
    }
}

这个方法逻辑清晰,性能也不错,适合处理简单或大量字符串的场景。

方法二:正则表达式(最灵活)

如果以后遇到更复杂的格式(比如字符串里可能有转义引号之类的),正则表达式会是更通用的选择,它能精准匹配成对的双引号内容:

using System.Text.RegularExpressions;

string input = @".0.label unicode ""Area - 110"" ";
// 用非贪婪匹配捕获双引号间的内容
Match matchResult = Regex.Match(input, @"""(.*?)""");
if (matchResult.Success)
{
    string extractedText = matchResult.Groups[1].Value;
    Console.WriteLine(extractedText); // 输出:Area - 110
}

这里的"(.*?)"是核心:"匹配双引号,(.*?)是非贪婪模式的捕获组,会尽可能短地匹配两个引号之间的所有内容,完美适配你说的“内容长度不固定”的情况。

方法三:Split方法(最简洁)

其实Split也能搞定,你之前担心的索引问题根本不存在——按双引号分割后,目标内容刚好是数组的第二个元素:

string input = @".0.label unicode ""Area - 110"" ";
string[] splitParts = input.Split('"');
// 只要分割后数组元素数量足够,直接取索引1的元素
if (splitParts.Length >= 2)
{
    string extractedText = splitParts[1];
    Console.WriteLine(extractedText); // 输出:Area - 110
}

这个方法代码最少,适合快速实现简单需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:57:23