python中的正则表达式,特殊情况

时间:2013-06-29 12:40:06

标签: python regex

我是python的新手,我正在尝试从字符串中提取一个值,但它不起作用。 我的字符串是这样的:

<a href=​"/​profile/​view?id=34232962&goback=%2Enmp_*1_*1_*1_*1_*1_*1_*1_*1_*1_*1&trk=spm_pic" title=​"View your profile">​

我的尝试是:

m = re.search('^.*\b(view|your|profile)\b.*$', newp, re.IGNORECASE)
print m.group(0)

所需的输出:

/​profile/​view?id=34232962&goback=%2Enmp_*1_*1_*1_*1_*1_*1_*1_*1_*1_*1 trk=spm_pic

3 个答案:

答案 0 :(得分:3)

正如你所发现的那样,正则表达式解析HTML非常糟糕。使用为工作构建的工具。在python的情况下,使用BeautifulSoup。

soup = BeautifulSoup(html_doc)
profile_a = soup.find(title="View your profile")
link = profile_a['href']
print link
>> /​profile/​view?id=34232962&goback=%2Enmp_*1_*1_*1_*1_*1_*1_*1_*1_*1_*1 trk=spm_pic

答案 1 :(得分:0)

阿?你想抓取LinkedIn私人网页? ;)

这样的事情应该有效:

m = re.search('href="(/profile/[^"]+)"', newp, re.IGNORECASE)

但是,像往常一样,不使用正则表达式来解析HTML

答案 2 :(得分:0)

您需要知道* 贪婪,即它会尝试匹配最大字符数。所以在你的例子中(如果仅匹配href):

'^.*\b(view|your|profile)\b.*$'

.../​profile/​view?id=34232962&goback=%2Enmp_*1_*1_*...
^---------^ matched by '.*'
           ^ \b
            ^--^ matched by 'view'
                ^ \b
                 ^------... - matched by .*

如果匹配完整字符串:

... title=​"View your profile">
^------------------^ - .*
                    ^ \b
                     ^-----^ - 'profile'
                            ^ \b
                             ^ - .*

另一个注意事项:^.*<regex>.*$实际上只与<regex>

相同

您可能想要的是:href="([^"]*)" - 这将匹配href="..."中的任何内容