2012-05-09 3 views
1

나는이 내용처럼 뭔가의 이름을 얻을 필요가re.findall 및 정규식

names = [] 
matches = re.findall(r'''<a\stitle="(?P<title>[^">]+)"\sname="(?P<name>[^">]+)"></a>''',content, re.VERBOSE) 
for (title, name) in matches: 
    if title == name: 
     names.append(title) 
return names 

... 내가 얻을 이름 = [] ; 뭐가 잘못 되었 니?. 감사.

+0

이 * HTML을 구문 분석에 대한 정규식을 사용할 필요가,이 질문에 대한 첫 번째 대답을 읽어 http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml -self-contained-tags –

답변

4

어, 잘 분명히, 샘플 텍스트, nametitle 전에 제공하고 정규식에, titlename 전에 예상된다. 이것이 왜 HTML 구문 분석기를 사용해야하는지 이유 (또는 그 중 하나)입니다. 예를 들어 BeautifulSoup을 시도하십시오. 당신이 정규식을 주장하는 경우

단지 (보다 결코 다른 속성과는 다른 순서로 그 특성을 얻을 수 없을거야 있는지 확인하고) 주변의 매개 변수를 설정 :

names = [] 
matches = re.findall(r'''<a\sname="(?P<name>[^">]+)"\stitle="(?P<title>[^">]+)"></a>''',content, re.VERBOSE) 
for (name, title) in matches: 
    if title == name: 
     names.append(title) 

결과 : 당신의 *의 blasphematory 소개

>>> names 
['blu', 'bla', 'blo'] 
+1

예, beautifulsoup은 훨씬 더 확실 합니다만, 상속 된 공동입니다. 내가 정규식이 틀린 이유를 찾지 못했습니다. 나무 때문에 숲이 보이지 않았습니다. 고마워. – Antonio