2016-10-23 2 views
0

Ich habe eine Zeichenfolge '(test)skip(test774)2;3(xx2324)'. Das Vorhandensein des Wortes 'skip' ist notwendig.Regulärer Ausdruck Extrakt spezifischen Teil

re.search('skip[(].+[)]', args[0]).group(0) 

gibt mir 'skip(test774)', aber nicht 'test774'. Ich kann [5:-1] verwenden, um 'test774' zu erhalten, aber es ist zu schwerfällig

Was ist der einfachste Weg, um nur den Wert in Klammern ('test774') mit regulären Ausdrücken zu erhalten?

+1

Haben Sie darüber nachgedacht um den Teil einer Erfassungsgruppe Hinzufügen wollen Sie eigentlich? – jonrsharpe

Antwort

2

Um den gewünschten Text zu isolieren, verwenden Sie eine Erfassungsgruppe um den Teil des Regex, der diesem Text entspricht.

re.search('skip[(]([^)]+)[)]', args[0]).group(1) 

Die Veränderung I gemacht ist, wo man .+ (jede nicht leere Folge von Zeichen), ich habe ([^)]+) (a einfangende Gruppe eine nicht-leere Folge von anderen Zeichen als ) enthält; dies bedeutet, diesen Teil Das Spiel endet kurz vor dem ersten ), anstatt kurz vor dem letzten ), wie .+ würde).

regex101.com demo and explanation

+1

Dies [fehlschlägt] (https://regex101.com/r/wwSYoT/1) die Beispieleingabe. Sie müssen entweder die Auswertung in der Erfassungsgruppe _lazy_ '(. +?)' Vornehmen oder zur besseren Darstellung einfach eine schließende Klammer negieren '([^)] +)'. – TemporalWolf

+0

Sie haben Recht. Bearbeitet, um '. +' In '[^)] +' – cco

+0

zu ändern Ich würde auch einen Link zu debuggex/regex101 löschen und erklären, warum das im Vergleich zu dem, was er hatte, funktioniert. So kann jemand, der ein ähnliches Problem hat, eine bessere Vorstellung davon bekommen, wie er sein Problem lösen kann. Code-only-Antworten werden im Allgemeinen als minderwertig eingestuft. – TemporalWolf