如何在C#中从含多个匹配分隔符的字符串提取字符串数组?
在C#中提取字符串中的占位符
要从目标字符串里提取{}包裹的占位符名称,用正则表达式做模式匹配是最直接高效的方案。
基础实现代码
using System; using System.Text.RegularExpressions; class PlaceholderExtractor { static void Main() { string input = "hi how are you? {Id} any string {Name} can come here {Test}"; // 匹配{和}之间的非空内容,捕获中间的占位符名称 MatchCollection matches = Regex.Matches(input, @"\{([^}]+)\}"); string[] placeholders = new string[matches.Count]; for (int i = 0; i < matches.Count; i++) { // 提取分组1的内容(即{}中间的部分) placeholders[i] = matches[i].Groups[1].Value; } // 验证结果 foreach (var placeholder in placeholders) { Console.WriteLine(placeholder); } } }
用LINQ简化代码
如果习惯使用LINQ,可以把代码简化成更紧凑的形式:
using System; using System.Linq; using System.Text.RegularExpressions; class PlaceholderExtractor { static void Main() { string input = "hi how are you? {Id} any string {Name} can come here {Test}"; string[] placeholders = Regex.Matches(input, @"\{([^}]+)\}") .Cast<Match>() .Select(match => match.Groups[1].Value) .ToArray(); foreach (var placeholder in placeholders) { Console.WriteLine(placeholder); } } }
正则表达式说明
\{([^}]+)\} 的含义:
\{:转义匹配左大括号(因为{在正则中属于特殊字符)([^}]+):定义捕获分组,匹配任意非右大括号的字符,且至少出现一次,保证占位符名称非空\}:转义匹配右大括号
这个方案适用于无嵌套大括号的场景,完全匹配你的需求,运行后会得到包含Id、Name、Test的字符串数组。
内容的提问来源于stack exchange,提问作者pathak tejpal
相关产品推荐
相关产品推荐

