Regex + Entfernen allen text vor dem match
Ich versuche, herauszufinden, einen Weg, um entfernen Sie alle text in einer Zeichenfolge vor dem match in Regex. Ich bin die Codierung in C#.
Zum Beispiel, wenn die Zeichenfolge "Hallo, test-matching", und das Muster ist "test", ich möchte, dass das Ergebnis "test-Abstimmung" (dh entfernen Sie alles, was vor dem test).
Irgendwelche Gedanken? Danke!
EDIT: ich sollte wohl etwas genauer in meinem Beispiel nach der Lektüre Ihrer Antworten (und danke Ihnen). Ich mag die look-ahead-Methode, aber ich vereinfachte meinem Beispiel. Um die Dinge schwieriger, in der Regel die Saiten Aussehen:
"Hallo, test, matching-test everythingAfter"
So, wenn ich das Muster "test", wird es zu fangen die ersten. Was mein Ziel ist, ersetzen Sie alle text nach der zweiten Partie. Dh: Ergebnis im "test everythingAfter".... Tut mir Leid, dass.
- Ich bin nicht vertraut genug mit C# den code zu schreiben. Allerdings nicht mit einem RegEx verwenden Sie basic-string-Methoden. Suche zu finden, die auftreten, als die Nutzung substring alles einzufangen, was es nach.
- Für die Muster, die Sie versuchen zu löschen, werden Sie immer strings oder haben Sie manchmal das eigentliche reguläre Ausdrücke? Wenn der ehemalige, verwenden Sie
IndexOf
undSubstring
und vermeiden Sie Leistungseinbußen, die Sie nicht brauchen. - Mögliche Duplikate von: text Entfernen aus Zeichenfolge bis zu einem bestimmten Zeichen
Du musst angemeldet sein, um einen Kommentar abzugeben.
*Aktualisierte, mit matchcollection
"test\s"
hat gerade verbrauchttest
gefolgt von einem Leerzeichen, dann natürlich ein lookbehind für"test "
gelingen wird. Auch dieSingleline
option hat keine Wirkung, da die.
Metazeichen ist nicht in der regex.test
und ein Wort der folgende. In einem Kommentar zu einer anderen Antwort, die OP sagte, es ist wirklich der letzten vorkommen will er (Sie sollten aktualisieren Sie die Frage nochmal, @keynes), und das Spiel sollte beinhalten alles, was danach nicht nur ein Wort.Können Sie positive lookahead - mit einem string aber nicht erfassen:
So Sie aufnehmen möchten, die Dinge vor dem letzten auftreten des test:
Wenn Sie wollen, es zu machen, so dass es zu ersten mal testen, verwenden Sie lazy matching:
Für eine einfache Lösung, ersetzen Sie einfach "start-of-line - nichts "test" mit "Prüfung":
Seit
*
ist gierig, dieses wird ersetzen soweit wie möglich, D. H.a test b test c
wirdtest c
. Zu ersetzen, so wenig wie möglich, verwenden Sie*?
statt*
.Wenn Sie möchten, um zu vermeiden, duplizieren der Suche nach word, die Sie verwenden können, eine Zero-width positive lookahead assertion:
test
. Es kann nicht Sache in vielen Fällen, aber es kann auch irreführend sein.