Regulärer Ausdruck, der alles außer einem gegebenen regulären Ausdruck entspricht

8

Ich versuche einen regulären Ausdruck zu finden, der mit jeder Zeichenfolge übereinstimmt, die nicht mit mpeg beginnt. Eine Verallgemeinerung von dies entspricht einer beliebigen Zeichenfolge, die nicht mit einem bestimmten regulären Ausdruck beginnt.

Ich habe etwas wie folgt versucht:

%Vor%

Das Problem dabei ist, dass mindestens 4 Zeichen in der Zeichenfolge vorhanden sein müssen. Ich war nicht in der Lage, einen guten Weg zu finden, um damit umzugehen, und einen verallgemeinerten Weg, dies auf allgemeine Art und Weise zu handhaben.

Ich werde das in Python verwenden.

    
Shailesh Kumar 08.02.2018, 00:01
quelle

4 Antworten

23
%Vor%

Dies verwendet ein negatives Lookahead, um nur einer Zeichenfolge zu entsprechen, bei der der Anfang nicht mit mpeg übereinstimmt. Im Wesentlichen erfordert es, dass "die Position am Anfang der Zeichenkette keine Position sein kann, an der wir mit dem Regex mpeg übereinstimmen könnten, wir könnten erfolgreich übereinstimmen" - womit alles zusammenpasst, was nicht mit mpeg beginnt und nichts ergibt das tut.

Allerdings wäre ich neugierig auf den Kontext, in dem Sie dies verwenden - neben Regex könnten andere Optionen vorhanden sein, die entweder effizienter oder besser lesbar wären, wie ...

%Vor%     
Amber 11.12.2013, 06:29
quelle
8

Verliere deinen Verstand nicht mit Regex.

%Vor%

oder verwenden Sie startswith () mit dem Schlüsselwort "not"

%Vor%     
ghostdog74 23.11.2009 07:35
quelle
2
___ qstnhdr ___ Regulärer Ausdruck, der alles außer einem gegebenen regulären Ausdruck entspricht ___ answer1781651 ___

Ihre Regexp würde nicht mit "npeg" übereinstimmen, ich denke, Sie müssten sich einfallen lassen %code% , was ziemlich schrecklich ist. Eine andere Alternative wäre %code% Das ist nur ein bisschen besser.

Ich denke also, Sie sollten wirklich eine Vorausschau verwenden, wie von Dav und Gumbo vorgeschlagen: -)

    
___ tag123python ___ Python ist eine dynamische und stark typisierte Programmiersprache, die die Usability betont. Zwei ähnliche, aber größtenteils inkompatible Versionen von Python sind weit verbreitet (2 und 3). Wenn Sie eine versionsspezifische Python-Frage haben, sollten Sie die Tags [python-2.7] oder [python-3.x] zusätzlich zum Tag [python] verwenden. Wenn Sie eine Python-Variante wie jython, pypy, iron-python usw. verwenden, kennzeichnen Sie diese bitte entsprechend. ___ qstntxt ___

Ich versuche einen regulären Ausdruck zu finden, der mit jeder Zeichenfolge übereinstimmt, die nicht mit mpeg beginnt. Eine Verallgemeinerung von dies entspricht einer beliebigen Zeichenfolge, die nicht mit einem bestimmten regulären Ausdruck beginnt.

Ich habe etwas wie folgt versucht:

%Vor%

Das Problem dabei ist, dass mindestens 4 Zeichen in der Zeichenfolge vorhanden sein müssen. Ich war nicht in der Lage, einen guten Weg zu finden, um damit umzugehen, und einen verallgemeinerten Weg, dies auf allgemeine Art und Weise zu handhaben.

Ich werde das in Python verwenden.

    
___ tag123regex ___ Reguläre Ausdrücke stellen eine deklarative Sprache zur Verfügung, um Muster in Strings zu vergleichen. Sie werden häufig für die Überprüfung, Analyse und Umwandlung von Zeichenfolgen verwendet. Da reguläre Ausdrücke nicht vollständig standardisiert sind, sollten alle Fragen mit diesem Tag auch ein Tag enthalten, das die anwendbare Programmiersprache oder das entsprechende Werkzeug angibt. HINWEIS: Nach HTML-, JSON-, usw.-Regexen zu fragen, neigt zu negativen Reaktionen. Wenn es einen Parser dafür gibt, verwende stattdessen diesen. ___ answer1781605 ___
%Vor%

Dies verwendet ein negatives Lookahead, um nur einer Zeichenfolge zu entsprechen, bei der der Anfang nicht mit %code% übereinstimmt. Im Wesentlichen erfordert es, dass "die Position am Anfang der Zeichenkette keine Position sein kann, an der wir mit dem Regex %code% übereinstimmen könnten, wir könnten erfolgreich übereinstimmen" - womit alles zusammenpasst, was nicht mit mpeg beginnt und nichts ergibt das tut.

Allerdings wäre ich neugierig auf den Kontext, in dem Sie dies verwenden - neben Regex könnten andere Optionen vorhanden sein, die entweder effizienter oder besser lesbar wären, wie ...

%Vor%     
___ answer1781620 ___

Verliere deinen Verstand nicht mit Regex.

%Vor%

oder verwenden Sie startswith () mit dem Schlüsselwort "not"

%Vor%     
___
Gumbo 23.11.2009 07:41
quelle
0

Ihre Regexp würde nicht mit "npeg" übereinstimmen, ich denke, Sie müssten sich einfallen lassen ^($|[^m]|m($|[^p]|p($|[^e]|e($|[^g])))) , was ziemlich schrecklich ist. Eine andere Alternative wäre ^(.{0,3}$|[^m]|.[^p]|..[^e]|...[^g]) Das ist nur ein bisschen besser.

Ich denke also, Sie sollten wirklich eine Vorausschau verwenden, wie von Dav und Gumbo vorgeschlagen: -)

    
Jérémie Koenig 23.11.2009 09:14
quelle

Tags und Links