2016-04-26 5 views
-2

Ich habe folgenden String und ich möchte den letzten Teil ab Punkt zu strippen. Könnten Sie bitte beraten? Ich bin neu in reg Ausdrücke. .. [abc] [def] [ghi]reg-Ausdruck zum Abschneiden einer Zeichenfolge vom letzten Punkt

Danke, mc

+0

Haben Sie schon etwas probiert? Hinweise: '[^.]' Entspricht anychar außer einem Punkt, und '$' entspricht dem Ende der Eingabe ';)' – sp00m

+4

Geben Sie der Regel keinen Auftrag, wenn Ihre Sprache das kann. Welche Sprache verwendest du? – Bobot

+0

Dies ist ein nützliches Werkzeug, um Regex zu lernen: [regexr] (http://regexr.com) –

Antwort

0

Die regexp Sie brauchen, ist:

(.*?)(?:\.[^.]*)?$ 

Das regexp Stück für Stück:

(   # start of the first capturing sub-pattern 
    .*  # matches any character, any number of times (zero or more) 
    ?  # make the previous quantifier (`*`) not greedy 
)   # end of the first sub-pattern 
(?:  # start of the second sub-pattern; it doesn't capture the matching string 
    \.  # matches a dot (.) 
    [^.]* # matches anything but a dot (.), any number of times (zero or more) 
)   # end of the second sub-pattern 
?   # the previous sub-expression (the non-capturing sub-pattern) is optional 
$   # matches the end of the string 

Wie es funktioniert:

Der erste Teil (.*?) passt und erfasst alles bis zum letzten Punkt. Das Fragezeichen (?) macht die Null oder mehr Quantifizierer (*) nicht gierig. Es ist standardmäßig gierig und aufgrund des zweiten Unterausdrucks muss es optional sein (siehe unten), seine Gierigkeit lässt es mit der gesamten Zeichenfolge übereinstimmen.

Der Spezifizierer ?: am Anfang des zweiten Untermusters bewirkt, dass er nicht erfasst wird. Die übereinstimmende Teilzeichenfolge wird nicht gespeichert und ist nicht für die weitere Verwendung verfügbar. Das zweite Untermuster enthält \.[^.]* und entspricht einem Punkt (.) gefolgt von null oder mehr Zeichen, aber keines davon kann Punkte sein. Es passt nichts, wenn die Eingabezeichenfolge keinen Punkt enthält und die gesamte regexp nicht übereinstimmt. Deshalb ist es als optional gekennzeichnet, indem Sie es mit einem Fragezeichen (?) folgen.

Die meisten Tools, die mit regexp arbeiten, bieten eine Möglichkeit, die erfassten Zeichenfolgen mithilfe von $n oder \n als Platzhalter in der Ersetzungszeichenfolge abzurufen und zu verwenden. n oben ist die Nummer des Erfassungsmusters, gezählt durch seine offene Klammer (. Da wir nur ein Capturing Sub-Muster haben, sollte die passende Sub-String entweder als $1 oder \1 (oder beide oder mit einer anderen Syntax) verfügbar sein.

Sie können mit diesem regexp auf regex101.com spielen.

Verwandte Themen