Разделить на несколько символов, сохраняя символ в результате - PullRequest
3 голосов
/ 25 февраля 2012

Я хочу разделить на '0' и '1', сохраняя эти символы в результате разделения. Как я могу сделать это в C #?

, например

"012345" => 0,1,2345

Я пытался

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

но я получаю "", 0, 12345 в результате

Кажется, что работает следующее, кроме "" между разбиениями.

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

1 Ответ

1 голос
/ 25 февраля 2012

Вы можете использовать LINQ, чтобы просто исключить пустые элементы, используя шаблон регулярного выражения, который вы упомянули в своем посте:

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));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...