2009-04-17 1 views
0

웹 페이지에서 라인을 정규 표현하려고합니다. 그 줄은 다음과 같습니다 :Python Regexp problem

<tr><td width=60 bgcolor='#ffffcc'><b>random Value</b></td><td align=center width=80> 

이것은 제가 시도한 것이지만, 아무런 도움이되지 않습니다 'htmlbody'는 html 페이지를 포함하고 있습니다. 're'를 가져 오는 것을 잊지 않았습니다.

reg = re.compile("<tr><td width=60 bgcolor='#ffffcc'><b>([^<]*)</b></td><td align=center width=80>") 
value = reg.search(htmlbody) 
print 'Value is', value 

답변

1

그것은 소리 : 당신은 무엇이 필요 HTMLParser 같은 HTML 파서입니다 HTML 처리시 가난합니다. HTMLParser module built in to Python을 사용하여 적절한 구문 분석기를 사용하는 것이 좋습니다.

1

import re 

htmlbody = "<tr><td width=60 bgcolor='#ffffcc'><b>random Value</b></td><td align=center width=80>" 

reg = re.compile("<tr><td width=60 bgcolor='#ffffcc'><b>([^<]*)</b></td><td align=center width=80>") 
value = reg.search(htmlbody).group(1) 
print 'Value is', value 

인쇄이 당신이 원하는 무엇을

Value is random Value 

인가?

+0

완전하지 않습니다. ... 문자열이 htmlbody에 지정되면 작동합니다. 그러나 내 스크립트에서 htmlbody 전체 HTML 페이지입니다. 그리고 그 경우에는 작동하지 않는 것 같습니다. 말씀 드린 것을 잊어 버렸습니다.이 페이지에는이 줄의 여러 사례가 포함되어 있습니다 ... – MarcoW

+0

은 이전 줄에있을 수 있습니다. regexp에서 제외시킬 수 있습니까? 모든 줄을 읽으면서 줄 바꿈없이 함께 붙이고 특정 정규식의 모든 항목을 검색 할 수 있습니다. 또는 regexp를 좀 더 일반적인 것으로 만들 수 있습니다. – clorz

4

정규식으로이를 수행 할 확실한 방법은 없습니다. 이유는 Can you provide some examples of why it is hard to parse XML and HTML with a regex?을 참조하십시오. 내가 당신을주의해야

reg = re.compile("<tr><td width=60 bgcolor='#ffffcc'><b>([^<]*)</b></td><td align=center width=80>") 
value = reg.findall(htmlbody) 
print 'Found %i match(es)' % len(value) 

정규 표현식 악명 것을,하지만 : 당신이 findall 오히려 search보다 사용 할 수 있습니다처럼

#!/usr/bin/python 

from HTMLParser import HTMLParser 

class FindTDs(HTMLParser): 
     def __init__(self): 
       HTMLParser.__init__(self) 
       self.level = 0 

     def handle_starttag(self, tag, attrs): 
       if tag == 'td': 
         self.level = self.level + 1 

     def handle_endtag(self, tag): 
       if tag == 'td': 
         self.level = self.level - 1 

     def handle_data(self, data): 
       if self.level > 0: 
         print data 

find = FindTDs() 

html = "<table>\n" 
for i in range(3): 
     html += "\t<tr>" 
     for j in range(5): 
       html += "<td>%s.%s</td>" % (i, j) 
     html += "</tr>\n" 
html += "</table>" 

find.feed(html)