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

C#如何提取元组返回字符串中||之间的内容并保存到变量

嘿,我来帮你解决这个字符串提取的问题!你提到想用LINQ,或者更简单的方法,我给你两种实用的方案,看看哪个更适合你:

方案一:正则表达式(精准匹配,代码简洁)

这种方法最直接,因为你的字符串有固定的|内容|模式,用正则可以一次性提取所有符合要求的内容。

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string input = "(ConnectionString|EEE99|, OutlookSenderTo|eda@test.com; e@ee.com|)";
        // 匹配被|包裹的内容:(?<=\|)确保前面是|,[^|]+匹配非|的字符,(?=\|)确保后面是|
        var matches = Regex.Matches(input, @"(?<=\|)[^|]+(?=\|)");
        
        if (matches.Count >= 2)
        {
            string str1 = matches[0].Value; // 结果:EEE99
            string str2 = matches[1].Value; // 结果:eda@test.com; e@ee.com
            Console.WriteLine(str1);
            Console.WriteLine(str2);
        }
    }
}

这个正则表达式会自动跳过所有不需要的字符,直接把每一对||之间的内容捞出来,非常省心。

方案二:LINQ处理Split结果(灵活可控,满足你的LINQ需求)

你之前用Split('|')得到了多余内容,那我们可以用LINQ过滤掉这些“噪音”:

using System;
using System.Linq;

class Program
{
    static void Main()
    {
        string input = "(ConnectionString|EEE99|, OutlookSenderTo|eda@test.com; e@ee.com|)";
        var extractedValues = input.Split('|')
                                   // 先去掉空字符串和纯空白的内容
                                   .Where(s => !string.IsNullOrWhiteSpace(s))
                                   // 因为拆分后是【键、值、键、值】的顺序,所以取奇数索引的元素(从0开始)
                                   .Select((content, index) => new { Content = content, Index = index })
                                   .Select(item => item.Index % 2 == 1 ? item.Content : null)
                                   .Where(val => val != null)
                                   .ToArray();
        
        if (extractedValues.Length >= 2)
        {
            string str1 = extractedValues[0]; // EEE99
            string str2 = extractedValues[1]; // eda@test.com; e@ee.com
            Console.WriteLine(str1);
            Console.WriteLine(str2);
        }
    }
}

如果你的字符串以后会增加更多键值对,这个方法也能自动提取所有||之间的内容,灵活性拉满。

另外,如果你确定只有两个值要提取,也可以简化成更直接的写法:

var parts = input.Split('|')
                 .Where(s => !string.IsNullOrWhiteSpace(s))
                 .Skip(1) // 跳过第一个键"ConnectionString"
                 .Take(2); // 直接取前两个值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:43:23