拆分多个字符,同时将该字符保留在结果中

本文关键字:字符 保留 结果 拆分 | 更新日期: 2023-09-27 18:25:49

我想在'0''1'上进行拆分,同时将这些字符保留在拆分结果中。我如何在C#中做到这一点?

例如

"012345" => 0,1,2345

我试过

Regex.Split(number, @"(?=[01])");

但我得到了"", 0, 12345作为的结果

以下内容似乎有效,除了""在拆分之间。

Regex.Split(number, @"(0|1)");

拆分多个字符,同时将该字符保留在结果中

您可以使用LINQ,使用您在文章中提到的regex模式来简单地排除空元素:

var results = Regex.Split(number, @"(0|1)")
                   .Where(p => !String.IsNullOrEmpty(p));

这也是可行的。我希望看到一种更优雅的方法,我觉得这正是你所寻求的,但它能完成任务。

List<string> results = new List<string>();
int curInd = 0;
var matchInfo = Regex.Matches(number, "(0|1)");
foreach (Match m in matchInfo)
{
    //Currently at the start of a match, add the match sequence to the result list.
    if (curInd == m.Index)
    {
        results.Add(number.Substring(m.Index, m.Length));
        curInd += m.Length;  
    }
    else  //add the substring up to the match point and then add the match itself
    {
        results.Add(number.Substring(curInd, m.Index - curInd));
        results.Add(number.Substring(m.Index, m.Length));
        curInd = m.Index + m.Length;
    }
}
//add any remaining text after the last match
if (curInd < number.Length)
{
    results.Add(number.Substring(curInd));
}