регулярное выражение совпадает с пересечением в C # - PullRequest
7 голосов
/ 20 апреля 2010

Интересно, можно ли получить MatchCollection со всеми совпадениями, даже если между ними есть пересечение.

string input = "a a a";
Regex regex = new Regex("a a");
MatchCollection matches = regex.Matches(input);
Console.WriteLine(matches.Count);

Этот код возвращает 1, но я хочу, чтобы он возвращал 2. Как этого добиться?
Спасибо за вашу помощь.

Ответы [ 2 ]

7 голосов
/ 20 апреля 2010
string input = "a a a";
Regex regexObj = new Regex("a a");
Match matchObj = regexObj.Match(input);
while (matchObj.Success) {
    matchObj = regexObj.Match(input, matchObj.Index + 1); 
}

будет выполнять итерацию по строке, начиная следующую итерацию, на один символ после позиции предыдущего совпадения, поэтому будет найдено все совпадения.

0 голосов
/ 20 апреля 2010

Вы можете сделать это в цикле while, заменив «a a» на «a» и сопоставив его в другое время с регулярным выражением, пока не будет найдено совпадение.

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