Regex - wie man alles außer einem bestimmten Muster anpasst
Wie Schreibe ich einen regulären Ausdruck für eine beliebige Zeichenfolge, die nicht ein bestimmtes Muster? Ich bin mit einer situation, wo ich mit einer (A und ~B) Muster.
InformationsquelleAutor der Frage notnot | 2009-03-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie ein look-ahead assertion:
Diesem Beispiel entspricht drei Ziffern, die anderen als
999
.Aber wenn Sie geschehen, nicht um einen regulären Ausdruck, der Umsetzung mit diesem feature (siehe Vergleich des Regulären Ausdrucks Aromen), werden Sie wahrscheinlich haben, um bauen Sie einen regulären Ausdruck mit den grundlegenden Funktionen auf Ihrem eigenen.
Einen kompatiblen regulären Ausdruck mit basic-syntax nur wäre:
Dies gilt auch für alle drei Ziffern-Sequenz, die nicht
999
.InformationsquelleAutor der Antwort Gumbo
Wenn Sie angeben möchten, dass ein Wort in einem string und nicht mit einem Wort B. Zum Beispiel:
Wenn Sie einen text:
Wenn Sie möchten suchen Sie nach Zeilen für text, HABEN einen Hund für ein Haustier und NICHT die Katze Sie können mit diesem regulären Ausdruck:
Wird es finden nur die zweite Zeile:
InformationsquelleAutor der Antwort Aleks
Match gegen das Muster, und verwenden Sie die Sprache des Gastlandes zu invertieren das Boolesche Ergebnis des Spiels. Das wird viel besser lesbar und wartbar.
InformationsquelleAutor der Antwort Ben S
notnot, Wiederauferstehung dieser alten Frage, denn Sie hatte eine einfache Lösung, war nicht erwähnt. (Fand Ihre Frage, während Sie einige der Forschung für eine regex-Kopfgeld-quest.)
Den basic regex dafür ist erschreckend einfach:
B|(A)
Sie ignorieren einfach die gesamten Spiele und prüfen der Gruppe 1 erfasst, welche enthalten A.
Ein Beispiel (mit all den Verzichtserklärungen über Parsen von html in regex): A-stellig, B Ziffern innerhalb
<a tag
Regex:
<a.*?<\/a>|(\d+)
Demo (Blick in die Gruppe 1 im rechten, unteren Fenster)
Referenz
Wie das Muster passen, außer in Situationen, s1, s2, s3
Wie Sie einem Muster entsprechen, es sei denn...
InformationsquelleAutor der Antwort zx81
Das Komplement einer regulären Sprache ist auch eine reguläre Sprache, aber um es zu konstruieren bauen Sie die DFA für die reguläre Sprache, und machen jeden gültigen Zustand zu ändern, in einen Fehler. Sehen diese für ein Beispiel. Was die Seite nicht sagen, ist, dass es konvertiert
/(ac|bd)/
in/(a[^c]?|b[^d]?|[^ab])/
. Die Konvertierung von einem DFA zurück zu einem regulären Ausdruck ist nicht trivial. Es ist einfacher, wenn Sie können, verwenden Sie den regulären Ausdruck unverändert und ändern Sie die Semantik im code, wie vorgeschlagen vor.InformationsquelleAutor der Antwort Juliano
Muster - re
wird alles zurück, außer das Muster.
Test hier
InformationsquelleAutor der Antwort unigogo
Meine Antwort hier könnte dein problem lösen:
https://stackoverflow.com/a/27967674/543814
$1
Sie würde Sie Lesen, Gruppe$2
.$2
gemacht wurde, nicht-Aufnahme gibt, die Sie vermeiden würde.Beispiel:
Regex.Match("50% of 50% is 25%", "(\d+\%)|(.+?)");
Die erste erfassungsgruppe definiert das Muster, das Sie möchten, zu vermeiden. Die Letzte Aufnahme der Gruppe erfasst alles andere. Einfach mal Lesen, dass die Gruppe,
$2
.InformationsquelleAutor der Antwort Timo
dann verwenden, was in der Gruppe 2 erfasst...
InformationsquelleAutor der Antwort DW.