2010-01-05 5 views
1

저는 구글과 모든 파이썬 문서를 통해 깨달음을 찾기 위해 키보드를 상대로 머리를 짚어 봤지만 지금 당면한 문제에 대한 답을 찾을 수 없었습니다.파이썬이 re.findall() 문에서 re.DOTALL을 무시하도록하는 방법은 무엇입니까?

I가 내가 웹 사이트에 대해 실행하지만, 파이썬은 내 코드에 말하지 않더라도, 그것에 re.DOTALL을 설정하는 주장은 다음 정규식 :

\d+. +(?P<season>\d+) *\- *(?P<episode>\d+).*?(?P<day>\d+)(?:\/|\s)+(?P<month>[A-Za-z]+)(?:\/|\s)+(?P<year>\d+) +(?:<a .+><img .+></a>)? ?<a .*?>(?P<name>.*?)</a> 

이 계절의 배열을 만듭니다/TV 프로그램 목록의 에피소드가 포함되어 있습니다. TVRage 목록 사용시 epGuides.com/BurnNotice을 제외하고는 잘 동작합니다. 줄 바꿈 이전에 약간의 공백이 있기 때문입니다.

http://re-try.appspot.com을 사용해 테스트 한 결과, re.DOTALL 사용에 대한 문제가 좁혀졌습니다. 내가 다시 시도 할 수있게한다면 스크립트에서 독립형으로 실행할 때 얻을 수있는 결과를 복제합니다. DOTALL의 설정을 해제하면 예상 한 결과를 얻을 수 있습니다.

파이썬이 re.DOTALL을 사용하지 않도록하려면 어떻게해야합니까?

스크립트는 우분투와 OS X에서 모두

+2

작업중인 데이터 샘플과 예상 출력을 제공 할 수 있습니까? –

+0

HTML 파서로 HTML을 파싱하는 것이 훨씬 낫습니다. Hell, 그 URL에있는 문서는 심지어 잘 구성된 XHTML입니다. BeautifulSoup을 찾아야하는 것보다 평범한 오래된 minidom으로 파싱 할 수도 있습니다. – bobince

+0

@James Polley : 샘플 데이터는 http://epguides.com/BurnNotice/ 페이지의 소스 HTML 코드입니다. 예상 출력은 다음과 같이 구문 분석 될 수 있어야합니다. 에피소드의 시즌, 에피소드, 일, 월, 년, 이름 :show.episodes [(int (시즌), int (에피소드))] = { "title": name} –

답변

2

.+>[^>]+>로 변경해야하며,

.*?>

[^>]*>에 당신은 다른 사람들이 너무 [^\r\n]로 점 교체 시도 할 수 있지만, 위의 2 명 변경해야 실행 충분하다.

+0

위의 두 가지 변경 작업이 수행되지 않았지만 으로 대체했습니다. 감사합니다. ^를 사용하면이 시나리오에서 음수와 비슷합니까? –

+0

예, 음수는 '\ r \ n'을 제외한 모든 것을 의미합니다. – YOU

관련 문제