2016-10-19 6 views
0

私は、次のパターンをコンパイルしています:Pythonの正規表現のfindAll OR

pattern = re.compile("media.+\.(aac|ts)") 

私の考えは、文字列に含まれる.TSと.aacメディアファイルを取得することです。 (|)あなたが使用することができ、この受け入れ答えPython regular expressions ORによると メディアファイル名メディアu9xuxtkay_213.aacやメディアu9xuxtkay_213.tsすることができ

OR としてしかし、私はそれはdoenstので、それは受け入れ答えだ方法を見てはいけません私には動作するようです:

In [23]: s 
Out[23]: 'Sent from my iPhone' 

In [24]: patt = re.compile("Sent from my (iPhone|iPod)") 

In [25]: patt.findall(s) 
Out[25]: ['iPhone'] 

だから私はのfindAllを呼び出すと、私はこれを取得:

In [37]: media 
Out[37]: 'media-u9xuxtkay_213.aac' 

In [38]: pattern = re.compile("media.+\.(aac|ts)") 

In [39]: pattern.findall(media) 
Out[39]: ['aac'] 

私はメディア-u9xuxtkay_213.aacだけではなく、AACを取得する必要があります。受け入れられた答えが返されるのと同じ方法

+1

「r」メディア。+ \。(?: aac | ts) "は、キャプチャしていないグループです。 –

+0

他の質問の回答は間違っていますか? – lapinkoira

+0

いいえ、 're.finditer'と一緒に使用し、' .group() 'をつかんでください。しかし、より便利なものがあります。非捕捉のグループです。 –

答えて

1

カッコは、文字列から正規表現を選択する必要があることを示す「取得グルー​​プ」として機能します。 (?:)を使用すると、非キャプチャグループにすることができるので、代わりに文字列全体が取得されます。

re.compile(r"media.+\.(?:aac|ts)")