wollen einfach jedes Zeichen, um bis zu, aber nicht die letzte Periode einschließlichEinfache Regex: Match alles bis zum letzten Punkt
dog.jpg -> dog
abc123.jpg.jpg -> abc123.jpg
I
(.+?)\.[^\.]+$
wollen einfach jedes Zeichen, um bis zu, aber nicht die letzte Periode einschließlichEinfache Regex: Match alles bis zum letzten Punkt
dog.jpg -> dog
abc123.jpg.jpg -> abc123.jpg
I
(.+?)\.[^\.]+$
gibt es keine Notwendigkeit von Lookahead hier..es erhöht nur die Anzahl der Schritte – rock321987
das hat super funktioniert danke – bigdowg
Dies wird immer zweimal am selben Ort übereinstimmen. – sln
Dies wird der Trick
versucht haben(.*)\.
Die erste erfasste Gruppe enthält den Namen. Sie können darauf zugreifen, wie $1
oder \1
wie pro Ihre Sprache
das beinhaltet den Punkt für mich – bigdowg
@bigdowg wo verwenden Sie es? es zeigt nur den übereinstimmenden Teil .. der grüne Teil (in der Demo) zeigt die tatsächliche Zeichenfolge, die Sie wollen – rock321987
Dies ist eine gute Antwort. – sln
Reguläre Ausdrücke gierig standardmäßig sind. Das bedeutet, dass ein Regex-Muster, wenn es in der Lage ist, mehr Zeichen zu finden, mehr Zeichen enthält.
Dies ist eine gute Sache, in Ihrem Fall. Alles, was Sie tun müssen, ist Zeichen übereinstimmen und dann ein Punkt:
.*\.
heißt,
ist. # Match "any" character
* # Do the previous thing (.) zero OR MORE times (any number of times)
\ # Escape the next character - treat it as a plain old character
. # Escaped, just means "a dot".
Also:, AS jedes Zeichen OFT standardmäßig gierig wie möglich (weil gierig) und dann ein wörtlicher Punkt.
Haben Sie eine Frage? SO ist nicht hier, um deine regulären Ausdrücke für dich zu schreiben. – jonrsharpe
was für Fall wie 'abcd',' a.b.c.d.e'? – rock321987
auch, was Sie wollen, ist die Dateierweiterung zu entfernen ?? Warum benutzt du keine Werkzeuge dafür statt REGEX ?? wie Basisname()? – aampudia