Finden aller Positionen der Teilzeichenfolge in einer größeren Zeichenfolge in C #
Habe ich einen großen string, die ich brauche, zu analysieren, und ich finden müssen, dass alle Instanzen extract"(me,i-have lots. of]punctuation
, und speichern Sie den index jedes in eine Liste.
Also sagen, dass dieses Stück der Schnur war am Anfang und in der Mitte des größeren string, die beide von Ihnen gefunden werden würde, und Ihre Indizes würde Hinzugefügt werden, um die List
. und die List
enthalten würde 0
und die anderen index-was auch immer es sein würde.
Ich habe das Spiel, und die string.IndexOf
hat fast das, was ich Suche, und ich schrieb einige code - aber es funktioniert nicht und ich habe nicht in der Lage, genau herauszufinden, was falsch ist:
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
= Die Listesource
= Die großen string
Irgendwelche besseren Ideen?
InformationsquelleAutor der Frage caesay | 2010-04-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine Beispiel-extension-Methode für Sie:
Wenn man diese in eine statische Klasse und importieren Sie den namespace mit
using
erscheint es als Methode für eine beliebige Zeichenfolge, und Sie können einfach tun:Weitere Informationen über die Verlängerung Methoden, http://msdn.microsoft.com/en-us/library/bb383977.aspx
Auch gleich mit einem iterator:
InformationsquelleAutor der Antwort Matti Virkkunen
Warum nimmst du nicht die eingebaute RegEx-Klasse:
Wenn Sie brauchen, um die Wiederverwendung der Ausdruck dann kompilieren Sie es und cache ist es, irgendwo. Ändern Sie den matchString param, um eine Regex-matchExpression in eine andere überladung für die Wiederverwendung Fall.
InformationsquelleAutor der Antwort csaam
mithilfe von LINQ
InformationsquelleAutor der Antwort ehosca
Polierte version + Fall ignorieren support:
InformationsquelleAutor der Antwort net_prog
Nennen mag:
InformationsquelleAutor der Antwort MusiGenesis
Hallo nette Antwort von @Matti Virkkunen
Aber dieser duckt tests Fällen wie AOOAOOA
wo substring
sind AOOA und AOOA
Ausgang 0 und 3
InformationsquelleAutor der Antwort Pranay Deep
Basiert auf dem code, den ich verwendet habe, für die Suche nach mehreren Instanzen von string in einem größeren string, der code würde wie folgt Aussehen:
InformationsquelleAutor der Antwort Corin
InformationsquelleAutor der Antwort miguel quiros garcia
Ohne Regex, mit string-Vergleich Typ:
Zurück {3,8,19,22}. Leere-Muster entspricht allen Positionen.
Für mehrere Muster:
Zurück {3, 8, 19, 22, 15, 16}
InformationsquelleAutor der Antwort Sean
@csam ist richtig in der Theorie, obwohl sein code wird nicht complie und kann refractored zu
InformationsquelleAutor der Antwort arame3333
Bemerkte ich, dass mindestens zwei vorgeschlagenen Lösungen nicht behandeln, überlappende suchen hat. Ich habe nicht überprüfen den man markiert mit dem grünen Häkchen. Hier ist eine, die Griffe überlappende Treffer:
InformationsquelleAutor der Antwort Kevin Baker