2017-07-20 11 views
1

私は何が問題なのか分かりません。私は、項目のリストがあります:正規表現を実行する正規表現をリストします

int=['xe-0/1/1', 'xe-0/1/2', 'xe-0/1/3', 'xe-0/2/2', 'xe-0/2/3', 'xe-0/3/1', 'xe-1/0/2', 'xe-1/0/3', 'xe-1/1/1', 'xe-1/1/2', 'xe-1/2/2', 'xe-1/2/3', 'xe-1/3/1', 'xe-1/3/2', 'xe-2/0/2', 'xe-2/0/3', 'xe-2/1/1', 'xe-2/1/2', 'xe-2/1/3', 'xe-2/2/2', 'xe-2/2/3', 'xe-2/3/1', 'xe-2/3/2', 'xe-3/0/2', 'xe-3/0/3', 'xe-3/1/2', 'xe-3/1/3', 'xe-3/2/1', 'xe-3/2/2', 'xe-3/2/3', 'xe-3/3/2', 'xe-4/0/2', 'xe-4/0/3', 'xe-4/1/2', 'xe-4/1/3', 'xe-4/2/2', 'xe-4/2/3', 'xe-4/3/2', 'xe-4/3/3', 'xe-7/3/3', 'xe-8/0/7', 'xe-8/3/6', 'xe-8/3/7', 'xe-9/0/5', 'xe-9/0/6', 'xe-9/0/7', 'xe-9/1/5', 'xe-9/1/6', 'xe-10/0/4', 'xe-10/0/6', 'xe-10/0/7', 'xe-10/1/6', 'xe-10/2/4', 'xe-10/2/6', 'xe-10/2/7', 'xe-10/3/7', 'xe-11/0/6', 'xe-11/0/7', 'xe-11/1/6', 'xe-11/1/7', 'xe-11/2/6', 'xe-11/2/7', 'xe-11/3/6', 'xe-11/3/7'] 

を、私はこのリストを反復処理し、私は正規表現で定義するだけで試合が含まれている二つの新しいリストを取得したいです。

for i in range(2): 
    regex="xe-%s/1/*" %i 
    print regex 
    [x for x in int if re.match(r'regex',x)] 

結果:

XE-0/1/* [] XE-1/1/* []

しかし、それは動作しませんようです。

+0

希望の出力を投稿できますか? – Ajax1234

+1

リテラル文字列 "regex"を検索しています – jordanm

答えて

1

私はあなたがregexに保存された表現ではなく、文字列「正規表現」したいと考えてい:

regex="xe-%s/1/*" %i 

[x for x in numbers if re.match(regex,x)] 

注意をintので、変数名int、この場合numbersには、何か他のものに変更する必要があり、は組み込みの関数であり、コードの実行時にエラーをスローします。

+0

ここで間違っていれば間違っていますが、これは 'if'文が呼び出されるたびに正規表現を再コンパイルすると思います。この場合、最初にパターンをコンパイルしてから、 'pattern.match(x)'を使用することを検討してください。 –

+0

うん、今働いた。ありがとうalot 私は範囲(2): regex = "xe-%s/1/*"%i [re.match(regex、x)の場合はx内のx] –

+0

@TomWyllieあなたが正しいです。しかし、OPのコードを可能な限りエミュレートしようとしました。 – Ajax1234