2016-11-03 10 views
2

我有一長串來自石墨實例的命名空間,我試圖運行一些驗證並過濾掉沒有使用正確格式輸入的命名空間。在python中需要一點正則表達式幫助

我可以正常使用正則表達式,但這個傷害了我,希望有人能幫上忙。

有需要做一些基本的驗證和遠這個我來:

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

目的是篩選和匹配上的那些遵循標準化stats.gaugues.*.(exact OR match).(exact OR match).

該工程確定這樣的事情:

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

但不幸的是有人進入一些像:

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

因此,這些匹配一路到第二個dur.p.跳過可能的錯誤精確匹配,如stats.gauges.gitswarm.durham.p.durgitswarm1.dur.p.service.repos.eeps-merge_demo.users;我不想要。

我覺得這很簡單,但似乎目前看不出來。

任何幫助將非常感激。

謝謝!

+0

那麼,爲什麼'stats.gauges.gitswarm.durham.p.durgitswarm1.dur.p.service.repos.eeps-merge_demo.users'不按規範'統計.gaugues。*。(確切地說是OR匹配)。(確切的OR匹配)。?在這種情況下,'*'匹配'gitswarm.durham.p.durgitswarm1'。問題出在你定義的'*'上。 –

+0

它需要失敗,因爲1)dur是有效值,而不是durham和2)dur.p.應該不應該在它所在的位置,即使是無效的值。 我同意這是與*的定義,我認爲這是我有麻煩放入正則表單形式。 – NoctemX

回答

2

這應該工作。基本上你需要讓你的.*非貪婪 ^(stats\.gauges\..*?\.(?:dur|hop|scz|led|bgi|shi|crk|sas)\.(?:p|s|q|u|d|x)\.)

+0

我不認爲這裏貪婪或不重要:OP正試圖發現負面情況 –

+0

我也試過:( ^(stats \ .gauges \ .. *?\。(?: dur | hop | scz | (?: p | s | q | u | d | x)\。) ![正則表達式可視化](https://www.debuggex.com/i /WUrnvP56g-0BVAZM.png) [Debuggex Demo](https://www.debuggex.com/r/WUrnvP56g-0BVAZM) – NoctemX

+0

在這種情況下,你可以推廣你的模式,因爲'。*'表示匹配任何東西,你必須提出一些特定的東西,而不是'。*' 你能告訴我'stats.gauges.'和'dur.p'之間究竟會發生什麼,它會總是一個字嗎? –