让我们说我们想要在这样的标签中提取链接:
输入:
<p><a href="http://www.google.com/home/etc"><b>some text</b></a></p>
期望的输出:
http://www.google.com/home/etc
第一个解决方案是使用此href=[\'"]?([^\'" >]+)
正则表达式查找与引用的匹配项
但我想要实现的是匹配href之后的链接。所以尝试这个(?=href\")...
(前瞻性断言:没有消费的匹配)仍然匹配href
本身。
这是一个只有正则表达式的问题。
答案 0 :(得分:2)
许多基于正则表达式的解决方案中的一个是捕获组:
>>> re.search(r'href="([^"]*)"', s).group(1)
'http://www.google.com/home/etc'
[^"]*
匹配任何非 - “。
答案 1 :(得分:1)
解决方案可能是:
(?:href=)('|")(.*)\1
(?:href=)
是一个非捕获组。这意味着解析器在匹配期间使用href,但它实际上不返回它。事实上,如果你在regex中尝试这样做,你会看到没有任何团体持有它。
此外,每次打开和关闭圆括号时,都会创建一个组。因此,('|")
定义了组#1,您想要的URL将在组#2中。检索此信息的方式取决于编程语言。
最后,\1
返回组#1保留的值(在这种情况下,它将是"
),以便为URL提供分隔符
答案 2 :(得分:0)
让自己熟悉解析器,例如与BeautifulSoup
有了这个,就可以用
from bs4 import BeautifulSoup
html = """<p><a href="http://www.google.com/home/etc"><b>some text</b></a></p>"""
soup = BeautifulSoup(html, "html5lib")
print(soup.find('a').text)
# some text
BeautifulSoup
支持多种选择器,包括CSS selectors。