Поиск всех позиций подстроки в большей строке в C # - PullRequest
62 голосов
/ 15 апреля 2010

У меня есть большая строка, которую мне нужно проанализировать, и мне нужно найти все экземпляры extract"(me,i-have lots. of]punctuation и сохранить индекс каждого в списке.

Так, скажем, этот фрагмент строки находился в начале и в середине большей строки, они оба будут найдены, и их индексы будут добавлены к ListList будет содержать 0 и другой индекс, каким бы он ни был.

Я играл, а string.IndexOf делает почти , что я ищудля, и я написал некоторый код - но он не работает, и я не смог точно выяснить, что не так:

List<int> inst = new List<int>();
int index = 0;
while (index < source.LastIndexOf("extract\"(me,i-have lots. of]punctuation", 0) + 39)
{
    int src = source.IndexOf("extract\"(me,i-have lots. of]punctuation", index);
    inst.Add(src);
    index = src + 40;
}
  • inst = Список
  • source = Большая строка

Есть идеи получше?

Ответы [ 12 ]

0 голосов
/ 13 декабря 2012

@ csam является теоретически правильным, хотя его код не будет соответствовать и может быть изменен до

public static IEnumerable<int> IndexOfAll(this string sourceString, string matchString)
{
    matchString = Regex.Escape(matchString);
    return from Match match in Regex.Matches(sourceString, matchString) select match.Index;
}
0 голосов
/ 15 апреля 2010

Исходя из кода, который я использовал для поиска нескольких экземпляров строки в большей строке, ваш код будет выглядеть следующим образом:

List<int> inst = new List<int>();
int index = 0;
while (index >=0)
{
    index = source.IndexOf("extract\"(me,i-have lots. of]punctuation", index);
    inst.Add(index);
    index++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...