我正在编写一个正则表达式来获取""之间的数据。我遇到的唯一问题是最后一个"被捕获了。正则表达式
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)m.group()打印https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html"。如何在不包括最后引号的情况下编写regex。
回答了我的问题。我补充说,我把所谓的非贪婪的东西加到了我的领地上。capture_regex = re.compile(r'(?<=HREF=").*?(?=")',re.IGNORECASE)。通过在?之后添加*,使其仅在第一个"处停止。
发布于 2019-09-10 01:26:51
capture_regex = re.compile(r'(?<=HREF=").*?(?=")',re.IGNORECASE)编辑:调整正则表达式,因为它太贪婪了。感谢@newdeveloper指出它!
发布于 2019-09-10 04:10:23
也许,来自bs4的bs4可以正常工作:
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可能会在这里工作:
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的右上面板中解释过了。如果您愿意的话,您也可以在这个链接中观察它如何与一些示例输入相匹配。
发布于 2019-09-10 08:09:03
这将起作用:
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']https://stackoverflow.com/questions/57862700
复制相似问题