2014-06-12 1 views
0

HTML 구문 분석에 REGEX를 사용하지 말아야한다는 것을 알고 있으며, HTML 민첩성 팩을 체크 아웃 할 것을 약속합니다. 그러나 그 동안에 전문가가 말해 줄 수 있습니까? 이 전체 블록과 일치하는 패턴?HTML 텍스트 블록의 줄 바꿈 극복하기

<tr bgcolor="#f4f4ff"><td align="center"><font size="2">42</font></td> 
<td align="center"><font size="2">35</font></td> 
<td><font size="2"><a href="/movies/?id=bears.htm"><b>Bears</b></a></font></td> 
<td><font size="2"><a href="/studio/chart/?view2=calendar&yr=2014&studio=buenavista.htm">BV</a></font></td> 
<td align="right"><font size="2"><b>$33,845</b></font></td> 
<td align="right"><font size="2"><font color="#ff0000">-60.1%</font></font></td> 
<td align="right"><font size="2">75</font></td> 
<td align="right"><font size="2"><font color="#ff0000">-35</font></font></td> 
<td align="right"><font size="2">$451</font></td> 
<td align="right"><font size="2">$17,492,470</font></td> 
<td align="right"><font size="2">-</font></td> 
<td align="center"><font size="2">8</font></td> 
</tr> 

VBA를 사용 중이며 regexoptions을 사용할 수없는 것 같습니다. 나는 끝없이 길들여졌으며, "일해야"한다.

<tr[.\n]+tr> 
<tr[.\s]+tr> 
<tr[.\x0C\x\0A]+tr> 

하지 않는다. 첫 줄 바꿈까지 모든 것을 일치시킬 수 있습니다. 그런 다음 벽돌 벽에 부딪 혔습니다. 단일 회선 옵션을 사용할 수없는 경우 해결 방법이 있습니까? 어쩌면 VBA REPLACE 함수를 사용하여 일치 시키려고하기 전에 모든 vbcrlf 인스턴스를 다른 문자로 변경할 수 있습니까? 그리고 누군가가 HTML 민첩성 팩으로이 작업을 얼마나 쉽게 수행 할 수 있는지를 보여줄 수 있습니까?

답변

0

좋아요, 그렇다면 정규식을 사용하여 HTML을 구문 분석하는 것에 대한 경고를 들었습니까? (?:.|[\r\n]) 또는 [\s\S]

이 정규식이 블록을 일치 : 내가 아는 한

, VBAScript 그래서 우리는 이런 일에 가짜 DOTALL 도트을해야 할 줄에 걸쳐 일치의 DOTALL 모드가 없습니다 :

<tr[\s\S]*?</tr> 

하지만 중첩 된 행이있는 경우 죄송합니다. :)

Dim myRegExp, myMatches, matched_block 
Set myRegExp = New RegExp 
myRegExp.Pattern = "<tr[\s\S]*?</tr>" 
Set myMatches = myRegExp.Execute(SubjectString) 
If myMatches.Count >= 1 Then 
    matched_block = myMatches(0).Value 
Else 
    matched_block = "" 
End If 
+0

우수 샘플 코드는 ... 내가 여기에 대답 {링크] (찾았다 고 생각 http://aliraza.wordpress.com/2008/02/01/ html-table-parsing /에 대한 정규 표현식) 행 표현식 - * (. *?)'- 줄 바꿈이없는 경우에만 작동합니다. 모든 줄 바꿈을 제거해야 작동 할 수있었습니다. 당신은이 여분의 단계없이 완벽하게 작동합니다. 내가 이해하지 못하는 한 가지 - 왜 "*"와 "?"가 모두 필요합니까? 일하다? 어떻게 그들은 일렬로 일합니까? 패턴을 영어로 번역 할 수 있습니까? – trevbet

+0

예를 들어'\ d? '와 같은'?'이 아닙니다. '?'는'*'을 게으르게 만든다 : 그것은 다음''까지 일치한다. 그것이 없으면,'*'는 욕심이 많고 마지막 문자열 인''으로 되돌아 가기 전에 문자열의 끝으로 굴러갑니다. [Regex Greed의 많은 학위들]을 읽어보십시오. (http://www.rexegg.com/regex-greed.html) – zx81

+0

소년, 모든 차이를 만들 수있는 뉘앙스 ... 이것은 내가 왜 전체 테이블을 얻었는지 설명합니다. 내가 실험하고있는 동안 단 한 줄보다. 마지막 질문 하나 : 님께, 님의 정보를 받아야합니다. 이 패턴은>> [^ <\ f \ n \ r \ t \ v] + <'일을하는 것처럼 보이지만 각 경기에서 괄호를 벗겨야하는 번거 로움이 있습니다. 당신은 단지 데이터를 추출 할 더 나은 패턴을 알고 있습니까? – trevbet