2012-03-18 6 views
3

파이썬에 익숙하지 않고 PHP 정규식을 파이썬으로 변경하려고했지만이 멀티 라인 문제에 약간의 문제가 있습니다. 나는 지난 몇 날 동안 인터넷을 오르락 내리락 치며 누군가가 위대한 사람이 될 수 있다면 그것을 이해할 수없는 것처럼 보입니다. 여기파이썬 2.7 re.MULTILINE 문제

mlsTagRegex = re.compile("<td\swidth=\"13%\"\sclass=\"TopHeader\">(.*?)</td>", re.MULTILINE) 
tdTags = mlsTagRegex.findall(output.getvalue()) 
print tdTags 

내가 찾고 싶은 HTML된다 : 여기에 내가 만든 정규식은

<td width="13%" class="TopHeader"> 

    <span class="red">I WANT THIS PART</span> 

</td> 

하고 그냥 나에게 하늘의 배열을 제공합니다. 내가 무엇을 놓치고 있는지 확실히 확신 할 수있다. 아마도 매우 간단 할 것이다. 그러나 나는 파이썬에 익숙하지 않다. 그래서 누군가가 도울 수 있다면 말이다. 감사!

p.s .: findall의 출력은 pycurl이 출력하고 html의 일부분이 출력됩니다.

답변

1

re.DOTALL을 사용하십시오. '.' 문자는 개행 문자를 포함한 모든 문자와 일치합니다.

mlsTagRegex = re.compile(r'<td width="13%" class="TopHeader">(.*?)</td>', re.DOTALL) 

을하지만 실제로는 구문 분석 HTML에 대한 정규식을 사용하지 않아야합니다, 대신 BeautifulSoup 또는 lxml를 사용

+0

OMG 고맙습니다. 나는 그것이 그처럼 단순한 무언가가 될 것이라는 것을 알았다! – classyhobo

2

당신은 . 경기 개행 문자를 만들기 위해 re.DOTALL를 사용해야합니다.

+0

고맙습니다. – classyhobo

+0

@ zeekay : 정규 표현식이 임의의 HTML과 일치하지 않는다는 점에서 옳습니다.하지만 정규 표현식이 충분히 잘 작동하는 간단한 경우 중 하나 인 것 같습니다. –

+1

필자는 동의하지 않을 것입니다. 이것은 생성 된 HTML에 * 모든 * 유형의 변경이 이루어지면 깨질 수있는 매우 취약한 정규 표현식입니다. – zeekay