Найти все шаблоны индексов в строке в C #

Как я могу найти все индексы шаблона в строке, используя c #?

Например я хочу найти все## индексы шаблона в строке, как это45##78$$#56$$JK01UU

 SCB11 мая 2012 г., 08:15
Вы пробовали что-нибудь? Вы пробовали регулярные выражения?
 Danny Chen11 мая 2012 г., 08:15
Как вы определяете «шаблон»?
 sanchop2211 мая 2012 г., 08:15
шаблон ввода ## строка 45 ## 78 $$ # 56 $$ JK01UU
 sanchop2211 мая 2012 г., 08:16
я не знаю точно, регулярное выражение
 Habib11 мая 2012 г., 08:15
Не могли бы вы показать некоторые входные строки и предполагаемый вывод?

Ответы на вопрос(5)

Проверено. Работал. Но несколько тупой.

string foo = "45##78$#56$JK01UU";
char[] fooChar = foo.ToCharArray();

int i = 0;
bool register = false;

foreach (char fc in fooChar)
{
    if (fc == '#' && register == true)
    {
        MessageBox.Show("Index: " + (i-1));
    }
    else if (fc == '#')
    {
        register = true;
    }
    else
    {
        register = false;
    }
    i++;
}

public IEnumerable<int> FindPatternIndexes(string input, string search)
{
    var sb = new StringBuilder(input);

    for (var i = 0; search.Length <= sb.Length; i++)
    {
        if (sb.ToString().StartsWith(search)) yield return i;
        sb.Remove(0,1);
    }
}
Решение Вопроса
 string pattern = "##";
 string sentence = "45##78$#56$J##K01UU";
 IList<int> indeces = new List<int>();
 foreach (Match match in Regex.Matches(sentence, pattern))
 {
      indeces.Add(match.Index);
 }

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

string input = "45##78$#56$JK01UU", pattern = Regex.Escape("##");
Regex rx = new Regex(pattern);
var indices = new List<int>();
var matches = rx.Matches(s);
for (int i=0 ; i<matches.Length ; i++)
{
    indices.Add(matches[i].Index);
}
 11 мая 2012 г., 08:28
@yamen хороший звонок, спасибо. Обновил мой ответ.
 11 мая 2012 г., 08:27
Вам, вероятно, нужно бежатьRegex.Escape() на шаблоне.

public IEnumerable<int> FindAllIndexes(string str, string pattern)
{
    int prevIndex = -pattern.Length; // so we start at index 0
    int index;
    while((index = str.IndexOf(pattern, prevIndex + pattern.Length)) != -1)
    {
        prevIndex = index;
        yield return index;
    }
}

string str = "45##78$#56$JK01UU";
string pattern = "##";

var indexes = FindAllIndexes(str, pattern);
 11 мая 2012 г., 08:50
+1, это правильно
 18 дек. 2012 г., 15:23
Я думаю, это должно быть быстрее, чем ответы, которые используют регулярные выражения. Было бы неплохо иметь некоторые результаты профилирования.

Ваш ответ на вопрос