Соответствия регулярных выражений не работают как исключение - PullRequest
0 голосов
/ 23 марта 2010

Я пытаюсь сгруппировать следующую строку в три группы.

0:0:Awesome:awesome

То есть " 0 ", " 0 " и " Awesome: awesome "

Используя это регулярное выражение:

^([0-9]+)\:([0-9]*)\:(.*)$

Отлично работает на сервисах регулярных выражений в Интернете: http://rubular.com/r/QePxt57EwU

Но похоже, что .NET не согласен. Изображение проблемы Regex из Visual Studio http://xs.to/image-3F8A_4BA916BD.jpg

Ответы [ 3 ]

5 голосов
/ 24 марта 2010

MatchCollection содержит результаты применения регулярного выражения к исходной строке итеративно. В вашем случае есть только 1 совпадение - поэтому результаты верны. У вас есть несколько захватов в матче. Это то, с чем вы хотите сравнить, а не количество совпадений.

MatchCollection matches = RegEx.Matches("0:0:Awesome:awesome",
                                        "^([0-9]+)\:([0-9]*)\:(.*)$");

if( matches.Count != 1 && matches[0].Captures.Count != 3 )
  //...
1 голос
/ 24 марта 2010

Если вы хотите получить доступ к соответствующим группам, вам может помочь следующее

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            var pattern = "^([0-9]+)\\:([0-9]*)\\:(.*)$";

            var matches = Regex.Match("0:0:Awesome:awesome", pattern);

            foreach (var match in matches.Groups)
                Console.WriteLine(match);
        }
    }
}
0 голосов
/ 24 марта 2010

Я думаю, что это регулярное выражение подойдет

(?<nums>\d+\:?)+(?<rest>.*)

Затем вы можете собрать группы для 'num' и 'rest' вместе, как показано

public Regex MyRegex = new Regex(
      "^(?<nums>\\d+\\:?)+(?<rest>.*)$",
    RegexOptions.IgnoreCase
    | RegexOptions.CultureInvariant
    | RegexOptions.IgnorePatternWhitespace
    | RegexOptions.Compiled
    );
MatchCollection ms = MyRegex.Matches(InputText);

Где InputText будет содержать образец '0: 0: Awesome: Awesome'

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