如何解决这个非工作正则表达式模式匹配?

时间:2013-07-30 10:11:24

标签: python regex python-2.7 match

我想要使用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()

我的感觉是我使用的代码应该有效,但事实并非如此。任何建议或意见将不胜感激。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

除非你另有说明,否则Regex中的.将不符合换行符。但是,我认为更简洁的解决方案是使用正则表达式语法本身而不是使用flags=re.S来解决这个问题:

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

(?s)flags=re.S完全相同。

另外,我认为你想让你的比赛不符合最大化匹配。这是通过使用(.*?)代替(.*)

来完成的