2014-07-21 2 views
2

I 다음 (바로 아래 같은 형식) 시험이 : 마이 후와 : 나는 시험 부 "사이에있는 텍스트를 얻기 위해 시도하고있어정규식은 선이 두 문자열 사이의 문자열을 나누기 받기

<td scope="row" align="left"> 
     My Class: TEST DATA<br> 
     Test Section: <br> 
     MY SECTION<br> 
     MY SECTION 2<br> 
    </td> 

을 제

나는 다른 정규식 패턴과 여러 가지 시도를 해봤 나는 어디받지 못했습니다

내가 할 경우.

(?<=Test)(.*?)(?=<br) 
내가

(?<=Test)(.*?)(?=</td>) 

내가 어떤 결과를 얻을 수없는 경우에,

' Section: ' 

그러나 : 6,

는 그럼 난의 정확한 응답을 얻을. 결과는 "내 금융
내 섹션 2
"

입니다. 결과가없는 RegEx Multiline도 사용해 보았습니다.

도움을 주시면 감사하겠습니다.

파이썬 2.7에서 코딩하는 것이 중요하다면.

뭔가 명확하지 않거나 더 많은 정보가 필요하면 알려 주시기 바랍니다.

+0

난 당신이 사용중인 언어에 따라 파서를 사용하도록 추천 할 것입니다. – Maroun

답변

1

re.S 또는 re.DOTALL 플래그를 사용하십시오. 또는 정규 표현식 앞에 (?s)을 붙이면 .이 모든 문자 (개행 문자 포함)와 일치합니다.

플래그가 없으면 .은 개행과 일치하지 않습니다.

(?s)(?<=Test)(.*?)(?=</td>) 

예 :

>>> s = '''<td scope="row" align="left"> 
...  My Class: TEST DATA<br> 
...  Test Section: <br> 
...  MY SECTION<br> 
...  MY SECTION 2<br> 
...  </td>''' 
>>> 
>>> import re 
>>> re.findall('(?<=Test)(.*?)(?=</td>)', s) # without flags 
[] 
>>> re.findall('(?<=Test)(.*?)(?=</td>)', s, flags=re.S) 
[' Section: <br>\n  MY SECTION<br>\n  MY SECTION 2<br>\n '] 
>>> re.findall('(?s)(?<=Test)(.*?)(?=</td>)', s) 
[' Section: <br>\n  MY SECTION<br>\n  MY SECTION 2<br>\n '] 
+0

대단히 감사합니다! – CodeLikeBeaker

1

인덱스 1

Test Section:([\S\s]*)</td> 

Live demo

주 정합 기 얻기가 : 라스 변경 귀하의 필요에 따라 부분.

샘플 코드 :

import re 
p = re.compile(ur'Test Section:([\S\s]*)</td>', re.MULTILINE) 
test_str = u"..." 

re.findall(p, test_str) 

패턴 설명 :

Test Section:   'Test Section:' 
    (      group and capture to \1: 
    [\S\s]*     any character of: non-whitespace (all 
          but \n, \r, \t, \f, and " "), whitespace 
          (\n, \r, \t, \f, and " ") (0 or more 
          times (matching the most amount 
          possible)) 
)      end of \1 
    </td>     '</td>' 
+0

대단히 감사합니다! – CodeLikeBeaker

관련 문제