C#实现分割字符串并保留分隔符的方法
C# 分割字符串并保留分隔符的解决方案
针对你提出的需求,这里可以通过正则表达式的正向预查断言实现分割时保留分隔符(即示例中的(数字)前缀),具体方案如下:
实现思路
利用正则的零宽度正向预查(?=...),匹配每个(数字)前缀的起始位置作为分割点。这种断言只会匹配位置,不会"消耗"分隔符本身,因此分割后的每个结果项会自动包含对应的前缀及后续内容。
完整代码示例
using System; using System.Linq; using System.Text.RegularExpressions; class StringSplitDemo { static void Main() { string stringToSplit = "(10)12345(20)dk34jf(3)li33"; // 正则模式:匹配任意(数字)前缀的起始位置 string splitPattern = @"(?=\(\d+\))"; // 分割后过滤空字符串(原字符串开头是分隔符,会产生空项) string[] splitResult = Regex.Split(stringToSplit, splitPattern) .Where(item => !string.IsNullOrWhiteSpace(item)) .ToArray(); // 输出结果 foreach (var item in splitResult) { Console.WriteLine(item); } } }
代码说明
- 正则模式
@"(?=\(\d+\))":(?=...):正向预查断言,仅匹配一个位置,不消耗任何字符\(\d+\):匹配(+ 一个或多个数字 +)的格式,也就是你需要保留的分隔符前缀
- 过滤空项:因为原字符串以
(10)开头,分割后第一个元素是空字符串,所以用Where过滤掉空白项 - 扩展性:如果你的分隔符前缀是
(任意内容),可以把正则改成@"(?=\([^)]+\))",这样能匹配括号内任意非)的内容
运行上述代码后,输出结果与你期望的完全一致:
(10)12345
(20)dk34jf
(3)li33
内容的提问来源于stack exchange,提问作者hi itsme
相关产品推荐
相关产品推荐

