【问题标题】:How to fix this non working regex pattern matching?如何修复这个不工作的正则表达式模式匹配?
【发布时间】:2013-07-30 10:21:45
【问题描述】:

我尝试使用re.compile 匹配一个模式。但是,我无法让脚本产生所需的结果。下面是我希望抓取的一些 HTML 代码的示例,我希望从下面的 HTML 中生成两个列表项。

以下是我选择这两个列表项的尝试:

import re

def getData():  

    trans_array = "" ##HTML data here
    pattern2 = re.compile('<table width="100%" border="0" class="tbl t3 mobile-collapse">(.*)</table>')

    print re.findall(pattern2, trans_array)

getData()

我的感觉是我使用的代码应该可以工作,但它没有。任何建议或 cmets 将不胜感激。

【问题讨论】:

  • 您应该使用 S 修饰符 re.S 来匹配带有点 . 的换行符。也别忘了让你的表情变得不贪心(.*?)

标签: python regex python-2.7 match


【解决方案1】:

默认情况下,正则表达式中的. 不匹配换行符。将flags=re.S 参数添加到re.compile,您的正则表达式将起作用。

【讨论】:

    【解决方案2】:

    除非您另有说明,否则正则表达式中的 . 不会匹配换行符。然而,与其使用flags=re.S 来解决这个问题,我认为更简洁的解决方案是只使用正则表达式语法本身:

    re.compile('(?s)<table width="100%" border="0" class="tbl t3 mobile-collapse">(.*?)</table>')
    

    (?s)flags=re.S 做同样的事情。

    另外,我认为你想让你的匹配不贪婪以最大化匹配。这是通过使用(.*?) 而不是(.*) 来完成的

    【讨论】:

      猜你喜欢
      • 2018-06-02
      • 2022-12-21
      • 1970-01-01
      • 2020-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多