Regex.Split демонстрирует странное поведение - PullRequest
4 голосов
/ 27 февраля 2010

У меня есть выражение регулярного выражения, которое я делаю на другую строку и получаю странные результаты.

        string subjectString = "Triage|Follow Up|QA";
        string[] splitArray = null;
        try
        {
            splitArray = System.Text.RegularExpressions.Regex.Split(subjectString, @"(?<=(^|[^\\]))\|");

            foreach (var item in splitArray)
            {
                System.Diagnostics.Debug.Print(item);
            }
        }
        catch
        {
        }

Печатается:

Сортировка
е
Follow Up
р
QA

Регулярное выражение работает правильно в RegexBuddy, но не в C #. Любые идеи о том, что вызывает странное поведение? Дополнительные баллы за объяснение того, почему функция разделения действует так, как она есть.

Ответы [ 2 ]

5 голосов
/ 27 февраля 2010

Группировка (…) в вашем проверочном утверждении является причиной этого. Вместо этого попробуйте группу без захвата:

@"(?<=(?:^|[^\\]))\|"

Или вообще никакой дополнительной группировки:

@"(?<=^|[^\\])\|"
1 голос
/ 27 февраля 2010

RegexBuddy еще не эмулирует поведение .NET для включения текста, совпадающего с захватом групп в массиве, возвращаемом Split(). Чтобы получить то же поведение в .NET, что и в RegexBuddy, либо измените все группы захвата (...) на группы без захвата (?:...), либо используйте RegexOptions.ExplicitCapture, чтобы превратить все неназванные группы в группы без захвата.

Включая группы захвата в возвращаемый массив, функция Split() .NET позволяет включать как разделители, совпадающие с регулярным выражением, так и текст между разделителями в массиве. Разделение с помощью регулярного выражения <[^>]+> позволяет получить текст между тегами HTML без тегов HTML. Разделение с помощью регулярного выражения (<[^>]+>) позволяет получить текст между тегами HTML, включая теги HTML. (Эти простые регулярные выражения предполагают, что входные данные состоят из действительного HTML без каких-либо комментариев HTML.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...