Как найти несколько вхождений с группами регулярных выражений? - PullRequest
20 голосов
/ 14 июля 2010

Почему следующий код приводит к:

было 1 совпадение для '*' 1004 *

, а не:

тамбыло 3 совпадений для 'the'

using System;
using System.Text.RegularExpressions;

namespace TestRegex82723223
{
    class Program
    {
        static void Main(string[] args)
        {
            string text = "C# is the best language there is in the world.";
            string search = "the";
            Match match = Regex.Match(text, search);
            Console.WriteLine("there was {0} matches for '{1}'", match.Groups.Count, match.Value);
            Console.ReadLine();
        }
    }
}

Ответы [ 4 ]

41 голосов
/ 14 июля 2010
string text = "C# is the best language there is in the world.";
string search = "the";
MatchCollection matches = Regex.Matches(text, search);
Console.WriteLine("there was {0} matches for '{1}'", matches.Count, search);
Console.ReadLine();
14 голосов
/ 14 июля 2010

Regex.Match (String, String)

Выполняет поиск в указанной входной строке первого вхождения указанного регулярного выражения.Вместо этого используйте Regex.Matches (String, String) .

Поиск в указанной входной строке всех вхождений заданного регулярного выражения.

4 голосов
/ 14 июля 2010

Match возвращает первое совпадение, см. this о том, как получить остальное.

Вместо этого следует использовать Matches.Тогда вы можете использовать:

MatchCollection matches = Regex.Matches(text, search);
Console.WriteLine("there were {0} matches", matches.Count);
3 голосов
/ 14 июля 2010

Вы должны использовать Regex.Matches вместо Regex.Match, если хотите вернуть несколько совпадений.

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