2016-11-03 25 views
2

グラファイトインスタンスから長い名前空間のリストがあり、正しいフォーマットで入力されていない名前空間をフィルタリングして除外しようとしています。Pythonで少しの正規表現のヘルプが必要

私は通常正規表現でOKをすることができますが、これは私を傷つけていて、誰かが助けてくれることを望んでいました。

行われなければ、私はここまで来ている必要がありますいくつかの基本的な妥当性があります:

^(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 

これらは、stats.gauges.gitswarm.durham.p.durgitswarm1.dur.p.service.repos.eeps-merge_demo.usersのような完全一致の場合、2番目のdur.p.の可能性のあるエラーをスキップします。私は望んでいない。

私はこれがかなりシンプルなものだと感じますが、今までそれを把握できていないようです。

ご協力いただければ幸いです。

ありがとうございました!

+0

なぜ 'stats.gauges.gitswarm.durham.p.durgitswarm1.dur.p.service.repos.eeps-merge_demo.users'には、次のされていない標準化された'統計情報を作成する必要があります.gaugues。*。(完全一致または完全一致)。(完全一致または完全一致)。?この場合、 '*'は '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] – NoctemX

+0

この場合、 '。*'は何かにマッチするので、'stats.gauges.'と' dur.p'の間に正確に何が入るのか教えてください。それはいつも1つの単語ですか? –

関連する問題