C#中按括号分割字符串并保留所有内容到数组的方法
在C#中按括号分割字符串并保留所有内容
嘿,这个需求用正则表达式就能完美解决!你需要的是分割字符串但保留作为分割依据的括号片段,C#的Regex.Split方法刚好支持这个——只要把匹配括号的模式用捕获组包裹,捕获到的内容就会被保留在结果数组里。
具体实现步骤
正则模式设计:我们需要匹配完整的括号及内部内容,模式可以写成:
(\([^()]+\))\(:匹配左括号(转义是因为括号在正则里是特殊字符)[^()]+:匹配任意非括号的字符,确保只匹配到对应的右括号\):匹配右括号- 整个用
()包裹成捕获组,这样Regex.Split会把匹配到的括号片段也加入结果数组
代码示例:
using System; using System.Text.RegularExpressions; public class StringSplitExample { public static void Main() { string input = " hmmmmmmmm (asdfhqwe)asasd "; // 匹配完整的括号及内部内容的正则 string splitPattern = @"(\([^()]+\))"; string[] splitResult = Regex.Split(input, splitPattern); // 遍历输出结果(可以过滤空字符串,避免分割后出现空项) foreach (string segment in splitResult) { if (!string.IsNullOrWhiteSpace(segment)) { Console.WriteLine($"分割结果:\"{segment}\""); } } } }
运行结果
对于你的示例输入,运行后会输出:
分割结果:" hmmmmmmmm "
分割结果:"(asdfhqwe)"
分割结果:"asasd "
如果你的输入中括号前后带有空格(比如" hmmmmmmmm (asdfhqwe) asasd "),结果会自动保留这些空格,完全符合你的需求。
注意事项
- 这个正则只适用于非嵌套括号的场景,如果需要处理
(a(b)c)这种嵌套情况,得用递归正则表达式,模式会变成(\((?>[^()]+|(?1))*\)),感兴趣的话可以试试。
内容的提问来源于stack exchange,提问作者user5659664
相关产品推荐
相关产品推荐

