Python 如何在不匹配模式本身的情况下查看regex中的后面?
假设我们要提取标记中的链接,如下所示: 输入:Python 如何在不匹配模式本身的情况下查看regex中的后面?,python,regex,Python,Regex,假设我们要提取标记中的链接,如下所示: 输入: <p><a href="http://www.google.com/home/etc"><b>some text</b></a></p> 第一个解决方案是使用这个href=[\'”]?([^\'”>]+)regex查找与引用的匹配 但我想要实现的是匹配链接,然后是href。因此,尝试此(?=href\”)…(先行断言:匹配而不使用)仍然与href本身匹配 这是一个只有正则表达
<p><a href="http://www.google.com/home/etc"><b>some text</b></a></p>
第一个解决方案是使用这个href=[\'”]?([^\'”>]+)
regex查找与引用的匹配
但我想要实现的是匹配链接,然后是href。因此,尝试此(?=href\”)…
(先行断言:匹配而不使用)仍然与href
本身匹配
这是一个只有正则表达式的问题。许多基于正则表达式的解决方案之一是捕获组:
>>> re.search(r'href="([^"]*)"', s).group(1)
'http://www.google.com/home/etc'
[^”]*
匹配任何非“解决方案可以是:
(?:href=)('|")(.*)\1
(?:href=)
是一个非捕获组。这意味着解析器在匹配过程中使用href,但实际上并不返回它。事实上,如果您在中尝试此操作,您将看到没有组持有它
此外,每次打开和关闭圆括号时,都会创建一个组。因此,(“|”)
定义了组1,并且所需的URL将位于组2中。检索此信息的方式取决于编程语言
最后,
\1
返回group#1持有的值(在本例中为“
),为URL提供一个分隔符让您熟悉解析器,例如。有了这一点,就可以用
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
从bs4导入美化组
html=“””“
soup=BeautifulSoup(html,“html5lib”)
打印(soup.find('a').text)
#一些文本
BeautifulSoup
支持许多选择器,包括。如果我们不考虑使用正则表达式解析HTML的问题,您的正则表达式工作正常(至少在您的示例中)。但输出取决于您使用的确切函数。例如,请尝试使用re.findall()
。不,我只需要不带href
的链接,我真的不太确定你在问什么,但我有一种预感,你在寻找一个后援:(?这正是我想要的解决方案。谢谢。我必须编辑这个问题。有很多方法都是这样,但这只是一个正则表达式问题。它将与反向引用一起工作,而不仅仅是解决问题。:)
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