【问题标题】:python 2.7 re.MULTILINE troublespython 2.7 re.MULTILINE 的烦恼
【发布时间】:2012-04-03 02:11:09
【问题描述】:

我是 python 新手,我一直在尝试将我的 php 正则表达式更改为 python,但我遇到了这个多行的一些问题。在过去的几天里,我一直在互联网上上下浮动,我似乎无法理解它,如果有人可以提供帮助,那就太好了。这是我制作的正则表达式:

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>

它只是给了我一个空数组。我很确定我所缺少的可能相当简单,但就像我说我是 python 新手,所以如果有人可以帮忙?谢谢!

p.s.:findall 中的输出是 pycurl 输出的内容,html 的那部分就在里面。

【问题讨论】:

    标签: python regex python-2.7 pycurl


    【解决方案1】:

    您需要使用re.DOTALL 使. 匹配换行符:

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

    但实际上你应该避免使用正则表达式来解析 html,而是使用 BeautifulSouplxml

    【讨论】:

    • @zeekay:你说得对,正则表达式不适合匹配任意 HTML,但这似乎是正则表达式可以很好地工作的简单情况之一。
    • 我不同意,这是一个极其脆弱的正则表达式,如果对生成的 HTML 进行 任何 类型的更改,它就会中断。
    【解决方案2】:

    使用 re.DOTALL,所以 '.'字符将匹配任何字符,包括换行符。

    【讨论】:

    • 天啊,非常感谢。我就知道会是这么简单的事情!
    猜你喜欢
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 2014-02-17
    相关资源
    最近更新 更多