2016-10-19 2 views
0

나는 다음과 같은 패턴을 컴파일 오전 :파이썬 정규식 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 "media. + \. (?: aac | ts)"'를 사용하십시오. –

+0

다른 질문에서 허용되는 대답이 잘못 되었습니까? – lapinkoira

+0

아니요,'re.finditer'와 함께 사용하고'.group()'을 잡으면. 그러나보다 편리하게 사용할 수있는 그룹이 있습니다. –

답변

1

괄호는 정규식에서 문자열에서 선택해야하는 것을 나타내는 "캡처 그룹"의 역할을합니다. (?:)을 사용하여 캡처하지 않는 그룹으로 만들 수 있으므로 대신 전체 문자열을 가져옵니다.

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