2013-08-23 8 views
15

Ich versuche, einen regulären Ausdruck zu verwenden, um einen Teil einer Zeichenfolge zu finden und alles bis zu dieser Zeichenfolge auszuwählen. Also zum Beispiel, wenn meine Zeichenfolge this/is/just.some/test.txt/some/other ist, möchte ich nach .txt suchen und wenn ich es finde alles vor und bis zu .txt auswählen.Regulärer Ausdruck, um alles vor und bis zu einem bestimmten Text auszuwählen

+0

Mit "alles vor und bis zu. txt" auswählen, meintest du "alles vor und einschließlich .txt" auswählen? Wenn ja, sind die Antworten bisher falsch. Ansonsten sind "vorher" und "bis zu" überflüssig. –

+0

@Jim L - Ich würde sagen er meint bis zum Ende von .txt, nicht bis zum Anfang von .txt – pguardiario

+0

Was könnte die Lösung sein um nur das komplette Wort vor .txt zu erfassen? In diesem Fall "Test". –

Antwort

27

Nach dem Ausführen der folgenden Regex ist Ihre Antwort in der ersten Erfassung.

/^(.*?)\.txt/ 
+2

Nett, schlag mich auf den Schlag. Beachten Sie, dass Sie je nach verwendeter Regex-Engine das Wrapping nicht benötigen '/' – vroomfondel

+0

Ja, guter Punkt. Ich bin in Vim, Ruby oder JS 24/7, und ich vergesse immer das>. kikuchiyo

20

Das passt alles bis zu ".txt" (ohne es zu einschließlich):

^.*(?=(\.txt))

+1

+1 für die positive Lookahead Assertion mit einer Breite von Null. Nicht, dass es in diesem Fall wirklich einen großen Unterschied macht. –

+0

Lass uns sagen, dass du das http://url.com/users/2 in http://url.com/users/2/some/stuff/after willst, wie schließt du auch den Matcher ein? – Ben

4

Sie könnten nur tun ...

(.*?)\.txt 

tested here..

+0

Funktioniert nicht aus 2 Gründen: Du entkommst nicht dem '.', und dein'. * 'Ist gierig. Was ist mit Abctxt? (abc, statt keine Übereinstimmung) und abc.txt.txt? (abc.txt, statt abc) – vroomfondel

+0

+1, das ist eigentlich besser als meine Antwort, da ich das '^' in meiner Regex nicht brauchte (war überflüssig). – kikuchiyo

1

Bis einschließlich txt müssten Sie Ihre r ändern egex like so:

Verwandte Themen