2016-10-19 116 views
0

我編譯如下模式:Python的正則表達式的findall或

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

我的想法是獲得字符串中包含的.ts和.AAC媒體文件。 媒體文件名可以是媒體u9xuxtkay_213.aac或媒體u9xuxtkay_213.ts

根據這一公認的答案Python regular expressions OR你可以使用(|)作爲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。同樣的方式接受的答案應該返回從我的iPhone發送,而不僅僅是iPhone

+1

使用'r'media。+ \。(?: aac | ts)「',一個非捕獲組。 –

+0

那麼在另一個問題中接受的答案是錯誤的? – lapinkoira

+0

不,如果你用're.finditer'並抓住'.group()'。但有一個更方便的東西 - 一個非捕獲組。 –

回答

1

圓括號充當「捕獲組」,表示正則表達式應該從字符串中選擇什麼。您可以使用(?:)使其成爲非捕獲組,因此它將獲取整個字符串。

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