2011-02-06 7 views
1

나는 파이썬에서 정규식 일치 기능을 수행 중이다. 나는 다음과 같은 코드를 가지고있다 :이미지 태그의 링크를 정규식과 일치시키는 방법

def src_match(line, img): 
    imgmatch = re.search(r'<img src="(?P<img>.*?)"', line) 

    if imgmatch and imgmatch.groupdict()['img'] == img: 
     print 'the match was:', imgmatch.groupdict()['img'] 

위의 것은 나를 위해 올바르게 작동하지 않는 것 같다. 내가이 행운이있는 반면에을 이 될 이유

def href_match(line, url): 
    hrefmatch = re.search(r'<a href="(?P<url>.*?)"', line) 

    if hrefmatch and hrefmatch.groupdict()['url'] == url: 
     print 'the match was:', hrefmatch.groupdict()['url'] 
    else: 
     return None 

누군가가 설명해 할 수 있습니다 (어쩌면처럼 보인다 경우 또는 두 가지 모두 작동합니다)? 예를 들어, href_match() 함수의 식별자에 특별한 것이 있습니까? 두 함수에서 내가 찾고있는 문자열을 포함하는 줄과 문자열 자체를 모두 전달한다고 가정 할 수 있습니다.

편집 : 내가 내가 내가 좋아하는 태그를 얻을하지 않습니다 확신 언급한다 :

<img width="200px" src="somefile.jpg"> 

그 이유는 내가 그것을 HTML을 생성하는 특정 프로그램을 사용하고 있다는 것입니다 그처럼 태그를 생성하지 않습니다. 이 예는 내가 항상 같은 태그를 사러 갈 건데 가정 내에서 순수하게 이론적으로 간주되어야한다

<img src="somefile.jpg"> 

편집 : 여기

내가에 공급하고 라인의 예입니다 입력 인수와 일치하지 않는 기능 :

<p class="p1"><img src="myfile.anotherword.png" alt="beat-divisions.tiff"></p> 
+1

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – Pepe

+0

내 대답은 아래 참조하십시오. 늦은) 링크. 이것은 최소한 도움이되지 않으며 질문에 대답하지 않습니다. 저에게 배움을 도울 내 문제에 대한 확실한 답이 있습니다. – jml

+0

아래 내 대답에 따라, 둘 다 나를 위해 작동합니다 (대화 형 셸에서 Windows 7의 Python 2.7.1). 작동해야하지만 실패 할 입력에 대한 반례를 줄 수 있습니까? –

답변

1

규칙 # 37 : 정규 표현식으로 HTML을 구문 분석하지 마십시오.

작업 (이 경우 BeautifulSoup)에 적합한 도구를 사용하십시오.

편집 :

잘라 내기 및 붙여 넣기

>>> src_match('this is <img src="my example" />','my example') 
the match was: my example 

그래서 기능 표시 등의 기능과 테스트; 그러나 그것은

<img width="200px" src="Y U NO C ME!!" /> 

Edit4처럼 (완벽 유효) HTML 코드에 실패합니다

>>> src_match('<p class="p1"><img src="myfile.png" alt="beat-divisions.tiff"></p>','myfile.png') 
the match was: myfile.png 
>>> src_match('<p class="p1"><img src="myfile.anotherword.png" alt="beat-divisions.tiff"</p>\n','myfile.anotherword.png') 
the match was: myfile.anotherword.png 

가 여전히 작동; 일치시키려는 URL 값이 맞습니까?

+0

나는이 점에 대해 글을 올릴 때마다 이것을 설명해야한다는 것은 나에게 재밌다.하지만 나는 다시 말할 것이다. 나는이 기능을 가진 포괄적 인 파서를 만들려고 시도하지 않는다. 그것은 아주 작은 일이며, 다른 경우에는 효과가 있습니다. 당신은 두 개의 별개의 태그를 파싱하려고 시도하지 않고, 무엇보다 파이썬에서 정규 표현식에 대해 더 많이 배우고 싶다는 것을 알게 될 것입니다. – jml

+0

감사합니다. 그게 이 아니겠습니까? – jml

+0

FWIW, HTML을 생성하는 특정 프로그램이 있기 때문에 모든 태그가 어떻게 보이는지 정확히 알 수 있습니다. 예제가 유효하더라도 html을 결코 산출하지 않습니다. – jml

관련 문제