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
相关产品推荐
相关产品推荐

