2016-10-19 22 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)")