【发布时间】:2021-08-28 14:56:30
【问题描述】:
我目前有用于解析 markdown 文本的 Python 代码,以便提取 markdown 链接的方括号内的内容以及超链接。
import re
# Extract []() style links
link_name = "[^]]+"
link_url = "http[s]?://[^)]+"
markup_regex = f'\[({link_name})]\(\s*({link_url})\s*\)'
for match in re.findall(markup_regex, '[a link](https://www.wiki.com/atopic_(subtopic))'):
name = match[0]
url = match[1]
print(url)
# url will be https://wiki.com/atopic_(subtopic
这将无法获取正确的链接,因为它匹配第一个括号,而不是最后一个。
我怎样才能使正则表达式尊重到最后一个括号?
【问题讨论】:
-
令人困惑。你能提供一个完整的minimal reproducible example吗?
-
没有办法处理。请记住,
https://www.silly.com/abc))))是一个完全有效的 URL。用户必须将它们编码为 %29。甚至 Typora 也不处理嵌入的右括号。 -
@TimRoberts 这里没有,只是为了清楚。这是模棱两可的。期间。
-
在这种情况下,唯一的方法是使用堆栈并存储开括号的数量。但正如@TimRoberts 指出的那样,它可能会在其他情况下引起问题。
-
众所周知,HTML 不是一种正则语言,因此不能被正则表达式解析——所以你可能需要使用像 beautifulsoup 这样的模块。