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