我是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
答案 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="..."
中的任何内容