2016-11-03 4 views
2

Ich habe eine lange Liste von Namespaces aus einer Graphite-Instanz und versuche, einige Validierung auszuführen und die Namespaces auszufiltern, die nicht im richtigen Format eingegeben wurden.Benötigen Sie eine kleine Regex-Hilfe in Python

Ich kann in Ordnung mit Regex in der Regel tun, aber dieser eine tut mir weh und hoffte, jemand könnte helfen.

Es gibt einige grundlegende Validierung, die getan werden muss, und ich habe so weit gekommen:

^(stats\.gauges\..*\.(?:dur|hop|scz|led|bgi|shi|crk|sas)\.(?:p|s|q|u|d|x)\.) 

Ziel auf den, die im Anschluss an den standardisierten stats.gaugues.*.(exact OR match).(exact OR match).

Dies funktioniert ok zu filtern und Spiel ist für so etwas wie:

stats.gauges.gitswarm.dur.p.durgitswarm1.service.repos.eeps-merge_demo.users 

Aber leider trat jemand etwas wie:

stats.gauges.gitswarm.dur.p.durgitswarm1.dur.p.service.repos.eeps-merge_demo.users 

So passen diese vollständig zum zweiten überspringen möglichen Fehler auf genaue Übereinstimmungen wie stats.gauges.gitswarm.durham.p.durgitswarm1.dur.p.service.repos.eeps-merge_demo.users; was ich nicht will.

Ich fühle mich wie das ist ziemlich einfach, aber kann es nicht scheinen, es bis jetzt zu begreifen.

Jede Hilfe würde sehr geschätzt werden.

Vielen Dank!

+0

Warum also ist 'stats.gauges.gitswarm.durham.p.durgitswarm1.dur.p.service.repos.eeps-merge_demo.users' nicht nach den standardisierten' Statistiken .gaugues. *. (genaues OR-Match). (genaues OR-Match). In diesem Fall stimmt '*' mit 'gitswarm.durham.p.durgitswarm1' überein. Das Problem liegt in Ihrer Definition von '*'. –

+0

Es muss fehlschlagen, weil 1) dur der gültige Wert ist, nicht Durham und 2) dur.p. sollte nicht an dem Ort sein, an dem es gerade mit dem ungültigen Wert ist. Ich stimme zu, es ist mit der Definition von *, denke ich, dass ist, was ich Probleme habe, in Regex Form. – NoctemX

Antwort

2

Dies sollte funktionieren. Grundsätzlich müssen Sie Ihre .* nicht gierig ^(stats\.gauges\..*?\.(?:dur|hop|scz|led|bgi|shi|crk|sas)\.(?:p|s|q|u|d|x)\.)

+0

Ich glaube nicht, gierig oder nicht hier: OP versucht, negative Fälle zu erkennen –

+0

Ich habe das auch versucht :( ^ (stats \ .gauges \ .. *? \. (?: dur | hop | scz | led | bgi | shi | crk | sas) \. (?: p | s | q | u | d | x) \.) ! [Visualisierung regulärer Ausdruck] (https://www.debuggex.com/i /WUrnvP56g-0BVAZM.png) [Debuggex-Demo] (https://www.debuggex.com/r/WUrnvP56g-0BVAZM) – NoctemX

+0

In diesem Fall können Sie Muster elobrate, weil '. *' Sagt, passen Sie alles, so dass Sie ' lch muss mir etwas Bestimmtes einfallen als '. *' Kannst du mir sagen, was genau zwischen 'stats.gauges' und' dur.p' liegen könnte. Wäre es immer ein Wort? –

Verwandte Themen