1

我是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
4

3 回答 3

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
于 2013-06-29T12:47:03.413 回答
0

啊?你想爬取LinkedIn的私人页面吗?;)

像这样的东西应该工作:

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

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

于 2013-06-29T12:44:13.673 回答
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="..."

于 2013-06-29T12:47:19.250 回答