2017-09-22 2 views
1

Ich gebe auf. Ich kenne Regex nicht, und ich habe die letzten zwei Tage damit verbracht, genug Glom zu erzeugen, nur um eine einfache Aufgabe auszuführen. Also werde ich alle Downvotes leiden, um diese einfache Frage zu stellen.Regex, um einen Teilstring zu extrahieren

ich eine Zeichenfolge, die wie folgt aussieht: path/to/the/file/text_I_want_tokeep_loremipsumdolorsitamet

Mit anderen Worten, ich möchte, was zwischen dem 4. „/“ ist und der 4. „_“.

Eine Antwort ohne Erklärung wird sehr geschätzt. Eine Antwort mit eine Erklärung wird noch mehr geschätzt. :)

Danke!

+0

Also was hast du bisher probiert? – JuanR

+0

alles, was ich versucht habe ist "ähnliche" Fragen hier auf S.O., dann zufällig die Antworten und die Anwendung auf meine Daten zu finden, herauszufinden, was was was. Ich bin gerade zu dem Schluss gekommen, dass ich es nicht herausfinden konnte; Ich möchte auf Seite 1 eines Regex-Tutorials beginnen. Ich werde das tun, aber ich muss dieses Problem schneller lösen als das dauern wird. – Steve

+0

@Steve Möchten Sie 'Loremipsumdolorsitamet' als Ihre Ausgabe? Sie sollten 'explode' oder' split' oder eine äquivalente Methode entsprechend der von Ihnen verwendeten Sprache verwenden. –

Antwort

1

Sie können so etwas versuchen.

Regex demo

Regex:^(?:[^\/]+\/){4}\K(?:[^_]+_){3}[^_]+

1.^ Mittel Zeichenkette beginnen.

2.(?:[^\/]+\/){4} Diese [^\/]+\/, hier [^\/]+ dies passen alle bis / und \// übereinstimmen und {4} ist dieses Muster viermal für den Abgleich.

3.\K Dadurch wird die aktuelle Übereinstimmung zurückgesetzt.

4.(?:[^_]+_){3}[^_]+, hier [^_]+ das alles außer _ und {3} dreimal übereinstimmen.


Hinweis: Stellen Sie sicher, einige Sprachen nicht \K in diesem Fall unterstützen Sie () Klammern um den Ausdruck nach \K geschrieben stellen kann es sich um eine Erfassungsgruppe zu machen.

+0

@Steve Versuchen Sie diesen. –

+1

Danke Sahil. Ich werde das akzeptieren. Es funktioniert in Regex101. Und danke besonders für die sehr klare Erklärung, die mir helfen wird zu lernen. Ich muss jetzt herausfinden, warum Stringr (R-Paket) dieses Muster nicht akzeptiert, aber das ist ein ganz anderes Problem, und eines, das ich selbst herausfinden kann! :) – Steve

+0

@Steve Willkommen .. Mein Freund .. Froh, Ihnen zu helfen .. :) –

2

sollte diese Arbeit:

.+/(.+)_.+ 

Es alle Zeichen Skipping im Grunde ist, bis es den Schrägstrich findet, fängt die nächste Portion, bis er einen Unterstrich erreicht, nachdem er andere Sachen hat.

+0

Danke Juan! Ich habe jetzt drei Antworten, alle mit Erklärungen, und sie scheinen alle zu funktionieren. Ich werde viel von diesem lernen. Schätze es wirklich! – Steve

+0

@Juan Gute Eins +1 für Sie .. –

+1

@Steve: Wenn Sie dieses Muster studieren, achten Sie auf [* backtracking *] (https://stackoverflow.com/questions/9011592/in-regular-expressions-what-is -a-Zurückverfolgen-Zurück-Referenzieren). –

Verwandte Themen