2011-10-11 2 views
0

파이썬을 사용하여 파일 이름에서 날짜를 추출해야합니다. 날짜 형식은 다음과 같습니다Python/Regex - 정규식을 사용하여 파일 이름에서 날짜를 추출하는 방법은 무엇입니까?

month-day-year.somefileextension 

예 :

10-12-2011.zip 
somedatabase-10-04-2011.sql.tar.gz 

이를 추출하는 가장 좋은 방법은 정규 표현식을 사용하는 것입니다?

import re 
m = re.search('(?<=-)\w+', 'derer-10-12-2001.zip') 
print m.group(0) 

코드는 '10'인쇄됩니다 :

나는 몇 가지 코드가 있습니다. 날짜를 인쇄하는 방법에 대한 단서가 있습니까?

안부,

답변

8

날짜를 가정한다 : 당신이하고 싶은 첫 번째 하이픈 및 기간 사이에 발생 숫자와 하이픈을 일치, 양쪽에 lookaround를 사용하는 것입니다 [MM] - [ DD] - [YYYY].

re.search("([0-9]{2}\-[0-9]{2}\-[0-9]{4})", fileName) 
4

당신은 capture group를 사용하고 싶습니다.

m = re.search('\b(\d{2}-\d{2}-\d{4})\.', 'derer-10-12-2001.zip') 
print m.group(1) 

10-12-2001을 인쇄해야합니다.

당신은 멀리 더 간결한 정규식 얻을 수 있지만,이 .하여 - 앞에와 뒤에 보장하는 펑키 이름을 가진 두 경기 또는 전혀 일치하지 말아야 잘못된 파일 이름에 대한 최소한의 보호를 제공 할 수 .

편집

: 나는 영숫자 및 영숫자가 아닌 사이의 경계를 일치하는 \b와 초기 -을 교체했다. 그렇게하면 하이픈이나 날짜 앞에 문자열의 시작 부분이 있는지 여부와 일치하게됩니다.

+1

첫 번째 예제와 같이 파일 이름이 날짜로 시작하면 정규 표현식이 일치하지 않습니다. 한 가지 방법은 패턴의 첫 번째 하이픈을'(? :^| -)'로 바꾸는 것입니다. – ekhumoro

+0

허, 네 말이 맞아. 나는 그 예를 알지도 못했다. 지금 편집 중입니다. – Chriszuma

0

잘 입력하면 \w+은 하이픈 다음에 하나 이상의 단어 문자와 일치하므로 예상되는 결과입니다. 형식으로 항상

re.search(r'(?<=-)[\d-]+(?=\.)', name).group(0)

관련 문제