2010-04-20 3 views
3

소스 문자열에있는 HTML 태그가 대상 문자열에도 존재하는지 확인하고 싶습니다.Python에서 regex를 사용하여 두 문자열의 HTML 태그를 일치 시키십시오.

예를 들어

:

>> source = '<em>Hello</em><label>What's your name</label>' 
>> verify_target(’<em>Hi</em><label>My name is Jim</label>') 
True 
>> verify_target('<label>My name is Jim</label><em>Hi</em>') 
True 
>> verify_target('<em>Hi<label>My name is Jim</label></em>') 
False 
+0

일치하는 원숭이와 별 및 deco_hand_frog (래칫 사용) –

답변

4

나는 Regex를 제거하고 Beautiful Soup을 보았습니다.
findAll(True)은 출처에있는 모든 태그를 나열합니다.

그런 다음 가능한 중복을 제거하고 태그 목록과 마주 치면됩니다.

이 스 니펫은 모든 소스 태그가 타겟 태그에 있음을 확인합니다.

from BeautifulSoup import BeautifulSoup 
def get_tags_set(source): 
    soup = BeautifulSoup(source) 
    all_tags = soup.findAll(True) 
    return set([tag.name for tag in all_tags]) 

def verify(tags_source_orig, tags_source_to_verify): 
    return tags_source_orig == set.intersection(tags_source_orig, tags_source_to_verify) 

source= '<label>What\'s your name</label><label>What\'s your name</label><em>Hello</em>' 
source_to_verify= '<em>Hello</em><label>What\'s your name</label><label>What\'s your name</label>' 
print verify(get_tags_set(source),get_tags_set(source_to_verify)) 
+0

Yepp. BeautifulSoup을 확실히 사용하고 싶습니다. –

1

난 그 정규식 HTML은 언제나 문자열이 기본적으로 있기 때문에, 여기에 올바른 방법이라고 생각하지 않는다, 그러나 그것은 조금 더 복잡한 중첩 된 태그입니다.

HTMLParser을 사용하는 것이 좋습니다. 원본 소스를 구문 분석하여 클래스를 만들고 구조를 작성하십시오. 그런 다음 검증 할 대상에 대해 동일한 데이터 구조가 유효한지 검증하십시오.

관련 문제