2014-10-11 3 views
0

저는 파이썬에서 HTML 문서의 문자열 목록을 컴파일하기 위해 REGEX를 사용하고 있습니다. 문자열은 td 태그 (<td>SOME OF THE STRINGS COULD BE HERE</td>) 또는 div 태그 (<div style="line-height: 100%;margin:0;padding:0;">SOME STRINGS COULD ALSO BE HERE</div>) 안에 있습니다.컴파일을 위해 파이썬에서 두 REGEX 결합하기

최종 목록 안에있는 문자열의 순서는 HTML 문서 안에 나타나는 순서와 일치해야하므로 두 경우 모두 고려하여이 문자열을 모두 컴파일 할 수 있도록 REGEX를 찾고 있습니다.

나는처럼 보이는 뭔가를 개별적으로 수행하는 방법을 알고 : 첫 번째 경우에 대한

FindStrings = re.compile('(?<=\<td>)(.*?)(?=\</td>)') 
MyList = re.findall(FindStrings, str(mydocument)) 

하지만 고유 REGEX 안에 두 경우를 결합하는 가장 효율적인 방법을 알고 싶습니다.

+1

왜 beautifulsoup를 사용하지 않습니까? –

답변

1

당신은 정규식 OR를 사용하여 정규식 패턴을 결합 할 수 있습니다. Btw, 정규식 둘러보기를 사용할 필요가 없습니다.

이 정규식 사용할 수 있습니다

<td>(.+?)</td>|<div.*?>(.+?)</div> 

Working demo

enter image description here

일치 정보를

MATCH 1 
1. [4-37] `SOME OF THE STRINGS COULD BE HERE` 
MATCH 2 
2. [94-125] `SOME STRINGS COULD ALSO BE HERE` 
QUICK REFERENCE 

번호 :

>>> import re 
>>> s = """<td>SOME OF THE STRINGS COULD BE HERE</td> 
... <div style="line-height: 100%;margin:0;padding:0;">SOME STRINGS COULD ALSO BE HERE</div> 
... """ 
>>> m = re.findall(r'<td>(.+?)</td>|<div.*?>(.+?)</div>', s) 
>>> m 
[('SOME OF THE STRINGS COULD BE HERE', ''), ('', 'SOME STRINGS COULD ALSO BE HERE')] 
>>> [s for s in x if s for x in m] 
['SOME STRINGS COULD ALSO BE HERE', 'SOME STRINGS COULD ALSO BE HERE'] 
+0

작업의 절반을 완료 한 것으로 보입니다 ... 빈 문자열을 포함하여 여러 문자열 쌍의 목록을 얻습니다. [('', '문자열 중 하나'), ('', '다른 하나') ...] – LaGuille

+0

안녕하세요 @LaGuille 화면 캡처에서 볼 수 있듯이 필요한 문자열이 모두 필요합니다. –

관련 문제