möchte, dass Regex beim ersten Auftreten von "." und ";"

8

Ich versuche, einen Satz aus einem Absatz zu extrahieren, mit einem Muster wie

%Vor%

Wenn ich Regex als

verwende %Vor%

Dies entspricht der gesamten Zeichenfolge

%Vor%

Stattdessen möchte ich beim ersten Auftreten von "." zu allen Erfassungsgruppen wie

%Vor%

Ähnlich für Text wie

%Vor%

Wenn ich Regex wie

verwende %Vor%

Dies entspricht der ganzen Zeichenfolge

%Vor%

Hier möchte ich alle Gruppen oder die erste Gruppe wie folgt erfassen und wie man beim ersten Auftreten von ";"

stoppt %Vor%

Wie kann ich einen regulären Ausdruck machen, um bei "," oder ";" mit obigen Beispielen?

    
Pramod Shinde 13.06.2014, 11:56
quelle

3 Antworten

9

Es gibt ein paar Dinge, die du eigentlich nicht mit deiner Regex machen solltest, zuerst, wie von Arnal Murali hervorgehoben, du solltest keine gierige Regex verwenden, sondern die faule Version:

%Vor%

Ich denke, es ist eine allgemeine Regel der Regex, zuerst die faule Option zu wählen, da es öfter ist, was Sie wollen. Zweitens möchten Sie . nicht wirklich verwenden, um alles zu finden, da Sie nicht zulassen möchten, dass dieser Teil Ihrer Regex entweder mit . oder ; übereinstimmt, die Sie in eine negative Capture-Gruppe aufnehmen können alles außer ihnen:

%Vor%

und

%Vor%

oder bedecken Sie beide mit:

%Vor%

(Dies ist offensichtlich nicht das, was Sie tun möchten, sondern nur um zu zeigen, wie Sie das erweitern können)

Dies ist auch eine gute Faustregel, wenn Sie Probleme mit einer Regex haben, machen Sie Wildcards spezifischer (in diesem Fall ändert sich alles von . zu alles außer . und ; mit [^.;] )

    
Mike H-R 13.06.2014, 12:06
quelle
3
%Vor%     
Bala 13.06.2014 12:27
quelle
3

Wie Amal sagte, ist dein Muster gierig und du solltest einen anhängen? um es faul zu machen. Ich würde Folgendes verwenden, um NUR das erste Vorkommen der gesuchten Zeichenfolge zu erhalten:

%Vor%

Und damit jede Gruppe diesem Muster folgt, unter Berücksichtigung ";" sowie '.':

%Vor%

Das letzte bedeutet im Grunde genommen: Finde jedes Vorkommen von 'aktuell' und halte an, wenn du das erste 'Schottland' erreichst, gefolgt von einem '.' oder ein ';'

    
sprk1 13.06.2014 12:13
quelle

Tags und Links