using System;
using System.Globalization;
using System.Linq;
using System.Collections.Generic;
public class Test
{
public static void Main()
{
string text = "2013-11-11 17:56:14 [INFO] $4/time: $5Changes the time on each $4world";
var tagsCT = new[] { "$1","$2","$3","$4" };
var tagIndices = new Dictionary<string, IList<int>>();
foreach (string tag in tagsCT)
{
IList<int> indices;
if (tagIndices.TryGetValue(tag, out indices))
continue; // to prevent the same indices on duplicate tags, you could also use a HashSet<string> instead of the array
else
{
indices = new List<int>();
tagIndices.Add(tag, indices);
}
int index = text.IndexOf(tag);
while (index >= 0)
{
indices.Add(index);
index = text.IndexOf(tag, index + 1);
}
}
foreach(var kv in tagIndices)
Console.WriteLine("Tag: {0} Indices: {1}",
kv.Key,
String.Join(",",kv.Value.Select(i=>i.ToString()).ToArray()));
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uR2xvYmFsaXphdGlvbjsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCXN0cmluZyB0ZXh0ID0gIjIwMTMtMTEtMTEgMTc6NTY6MTQgW0lORk9dICQ0L3RpbWU6ICQ1Q2hhbmdlcyB0aGUgdGltZSBvbiBlYWNoICQ0d29ybGQiOwogICAgICAgIHZhciB0YWdzQ1QgPSBuZXdbXSB7ICIkMSIsIiQyIiwiJDMiLCIkNCIgfTsKCQkKICAgICAgICB2YXIgdGFnSW5kaWNlcyA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgIElMaXN0PGludD4+KCk7CgkJZm9yZWFjaCAoc3RyaW5nIHRhZyBpbiB0YWdzQ1QpCgkJewoJCSAgICBJTGlzdDxpbnQ+IGluZGljZXM7CgkJICAgIGlmICh0YWdJbmRpY2VzLlRyeUdldFZhbHVlKHRhZywgb3V0IGluZGljZXMpKQoJCSAgICAgICAgY29udGludWU7IC8vIHRvIHByZXZlbnQgdGhlIHNhbWUgaW5kaWNlcyBvbiBkdXBsaWNhdGUgdGFncywgeW91IGNvdWxkIGFsc28gdXNlIGEgSGFzaFNldDxzdHJpbmc+IGluc3RlYWQgb2YgdGhlIGFycmF5CgkJICAgIGVsc2UKCQkgICAgewoJCSAgICAgICAgaW5kaWNlcyA9IG5ldyBMaXN0PGludD4oKTsKCQkgICAgICAgIHRhZ0luZGljZXMuQWRkKHRhZywgaW5kaWNlcyk7CgkJICAgIH0KCQkgICAgaW50IGluZGV4ID0gdGV4dC5JbmRleE9mKHRhZyk7CgkJICAgIHdoaWxlIChpbmRleCA+PSAwKQoJCSAgICB7CgkJICAgICAgICBpbmRpY2VzLkFkZChpbmRleCk7CgkJICAgICAgICBpbmRleCA9IHRleHQuSW5kZXhPZih0YWcsIGluZGV4ICsgMSk7CgkJICAgIH0KCQl9CgkJCiAgICAgICAgZm9yZWFjaCh2YXIga3YgaW4gdGFnSW5kaWNlcykKICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIlRhZzogezB9IEluZGljZXM6IHsxfSIsIAogICAgICAgICAgICAJa3YuS2V5LAogICAgICAgICAgICAJU3RyaW5nLkpvaW4oIiwiLGt2LlZhbHVlLlNlbGVjdChpPT5pLlRvU3RyaW5nKCkpLlRvQXJyYXkoKSkpOwoJfQp9