当前位置: 首页 > 知识库问答 >
问题:

贪心的正则表达式look[重复]

邢博涛
2023-03-14

我正在编写一个正则表达式来抓取“”之间的数据。我遇到的唯一问题是最后一个 正在被捕获。正则表达式

  line = '<DT><A HREF="https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html" ADD_DATE="1567455957">Clickjacking Defense · OWASP Cheat Sheet Series</A>'
  capture_regex = re.compile(r'(?<=HREF=").*?"',re.IGNORECASE)
  m = capture_regex.search(line)

< code>m.group()打印< code > https://cheatsheetseries . owasp . org/Cheat sheets/click jacking _ Defense _ Cheat _ sheet . html " 。如何编写不包含最后一个引号的正则表达式?

回答了我的问题。我添加了我在我的正则表达式中添加了所谓的非贪婪。capture_regex = 重新编译(r'(?


共有3个答案

长孙景天
2023-03-14

这将起作用:

import re

line = '<DT><A HREF="https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html" ADD_DATE="1567455957">Clickjacking Defense · OWASP Cheat Sheet Series</A>'

capture_regex = re.compile(r'(?<=HREF=")([^"]*)(?:")',re.IGNORECASE)
# capture_regex = re.compile(r'(?:HREF=")([^"]*)(?:")',re.IGNORECASE) this will work too
print(capture_regex.search(line).groups())
# print(capture_regex.findall(line))  # if your text contains more than one HREF

输出:

  ['https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html']
苍和裕
2023-03-14
capture_regex = re.compile(r'(?<=HREF=").*?(?=")',re.IGNORECASE)

工作小提琴

编辑:调整了正则表达式,因为它太贪婪了。感谢@newdeveloper指出来!

司马飞
2023-03-14

也许,bs4中的<code>find_all</code>可以正常工作:

from bs4 import BeautifulSoup

line = '<DT><A HREF="https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html" ADD_DATE="1567455957">Clickjacking Defense · OWASP Cheat Sheet Series</A>'
soup = BeautifulSoup(line, 'html.parser')

for l in soup.find_all('a', href=True):
    print(l['href'])
https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html

如果不是,也许,一些类似于

(?i)href="\s*([^\s"]*?)\s*"

使用re。findall</code>可能在这里工作:

import re

expression = r'(?i)href="\s*([^\s"]*?)\s*"'

string = """
<DT><A HREF="https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html" ADD_DATE="1567455957">Clickjacking Defense · OWASP Cheat Sheet Series</A>
<DT><A HREF=" https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html " ADD_DATE="1567455957">Clickjacking Defense · OWASP Cheat Sheet Series</A>
"""

print(re.findall(expression, string))
['https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html', 'https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html']

如果您希望浏览/简化/修改表达式,regex101.com 右上角的面板上进行了说明。如果您愿意,还可以在此链接中观看它与某些示例输入的匹配情况。

 类似资料:
  • 问题内容: 我如何制作像这样的python正则表达式,使得在给定的情况下,python匹配而不是? 我知道我可以使用代替,但是我正在寻找一种更通用的解决方案,使我的regex更加整洁。有什么办法告诉python“嘿,尽快匹配它”? 问题答案: 您寻找功能强大的吗? http://docs.python.org/3/howto/regex.html#greedy-versus-non-greedy

  • 问题内容: 我主要关心的是Java风格,但是我也希望了解其他信息。 假设您有一个像这样的子模式: 虽然这不是很有用,但可以说这两个捕获组(例如和)是更大模式的一部分,该模式与对这些组的反向引用匹配,依此类推。 因此,两者都是贪婪的,因为他们试图捕获尽可能多的东西,只在需要时花更少的时间。 我的问题是:谁更贪婪?是否获得优先权,仅在必要时才分配份额? 关于什么: 假设确实获得了优先权。假设它过于贪婪

  • 问题内容: 我有下一个代码: 并具有下一个输出: 但我认为它必须是: 有人请解释为什么。 问题答案: 由于您的模式是非贪婪的,因此它们在仍由匹配项组成的情况下,匹配的文本越少越好。 去除 ?在第二组中,您会得到 单词 word word big small

  • 本文向大家介绍php正则表达式中贪婪与非贪婪介绍,包括了php正则表达式中贪婪与非贪婪介绍的使用技巧和注意事项,需要的朋友参考一下 一、贪婪与非贪婪 什么叫贪婪,比如说要从字符串中<td>面包一</td><td>面包二</td>吃面包,本来你只可以吃面包一,可是你贪心,于是就把第一个<td>到最后一个</td>里面的两个面包取出来了,你想多吃点,非贪婪也就是你不贪吃了,就只吃面包一。 我们来看看正

  • 如何在不包含连续子字符串baa的字母表{a,b,c}上表达正则表达式?

  • 昨天,我需要向正则表达式添加一个文件路径,创建一个如下所示的模式: 一开始正则表达式不匹配,因为包含几个正则表达式特定的符号,如 或 。作为快速修复,我将它们替换为 和 . 与 . 然而,我问自己,是否没有一种更可靠或更好的方法来清除正则表达式特定符号中的字符串。 Python 标准库中是否支持此类功能? 如果没有,您是否知道一个正则表达式来识别所有正则表达式并通过替代品清理它们?