2009-03-02 10 views
3

내가 특정 사이트 다음찾기 앵커 텍스트 태그

에 링크 < > 태그 한 쌍의 사이에있는 텍스트를 찾으려면이있을 때 나는 콘텐츠를 찾을 사용하고 재 문자열입니다 :

r'''(<a([^<>]*)href=("|')(http://)?(www\.)?%s([^'"]*)("|')([^<>]*)>([^<]*))</a>''' % our_url 

결과이 같은 것입니다 :

r'''(<a([^<>]*)href=("|')(http://)?(www\.)?stackoverflow.com([^'"]*)("|')([^<>]*)>([^<]*))</a>''' 

이 대부분의 링크에 좋은 곳입니다하지만 내 태그와 링크가이 오류가 발생합니다.

([^<]*))</a>''' 

에 :

(.*))</a>''' 

을하지만 그냥 내가 원하지 않는 링크, 후 페이지에있는 모든 것을 가지고 내가 정규 표현식의 마지막 부분을 변경했습니다. 이 문제를 해결하기 위해 내가 할 수있는 것에 대한 제안이 있습니까?

답변

3

대신, 즉 비 욕심 검색 :

[^<>]* 

시도 : 즉

((?!</a).)* 

의 시작이 아닌 모든 문자와 일치 a </a 시퀀스.

+0

대단히 감사합니다. – Teifion

2

정규식을 사용하지 않습니다. Beautiful Soup과 같은 HTML 구문 분석기를 사용하십시오.

+0

간단한 문제로 인해 비트 중량이 약간 같습니다 ( – Teifion

+0

). HTML은 매우 불규칙합니다. 브라우저는 많은 수의 오류를 허용해야합니다. 아름다운 스프는 regexes가 할 수있는 것보다 불규칙한 HTML을 더 잘 처리 할 수 ​​있습니다. –

1

수행

(.*?) 
+0

앵커 텍스트 내의 태그가 일치 할 때까지 – Teifion

3
>>> import re 
>>> pattern = re.compile(r'<a.+href=[\'|\"](.+)[\'|\"].*?>(.+)</a>', re.IGNORECASE) 
>>> link = '<a href="http://stackoverflow.com/questions/603199/finding-anchor-text-when-there-are-tags-there">Finding anchor text when there are tags there</a>' 
>>> re.match(pattern, link).group(1) 
'http://stackoverflow.com/questions/603199/finding-anchor-text-when-there-are-tags-there' 
>>> re.match(pattern, link).group(2) 
'Finding anchor text when there are tags there' 
+0

감사합니다. 덕분에 많은 도움이되었습니다. –