我正在尝试从Markdown中提取锚文本和相关的URL。我看到了this问题。不幸的是,answer似乎没有完全回答我想要的。
在Markdown中,有两种方法可以插入链接:
示例一:
[anchor text](http://my.url)
字符串
示例二:
[anchor text][2]
[1]: http://my.url
型
我的脚本看起来像这样(注意我使用的是regex,而不是re):
import regex
body_markdown = "This is an [inline link](http://google.com). This is a [non inline link][4]\r\n\r\n [1]: http://yahoo.com"
rex = """(?|(?<txt>(?<url>(?:ht|f)tps?://\S+(?<=\P{P})))|\(([^)]+)\)\[(\g<url>)\])"""
pattern = regex.compile(rex)
matches = regex.findall(pattern, body_markdown, overlapped=True)
for m in matches:
print m
型
这将产生输出:
('http://google.com', 'http://google.com')
('http://yahoo.com', 'http://yahoo.com')
型
我的预期输出是:
('inline link', 'http://google.com')
('non inline link', 'http://yahoo.com')
型
如何从Markdown中正确捕获锚文本?
3条答案
按热度按时间3lxsmp7m1#
如何从Markdown中正确捕获锚文本?
将其解析为结构化格式(例如html),然后使用适当的工具提取链接标签和地址。
字符串
这让我明白:
型
另一种选择是编写自己的Markdown解析器,这似乎是错误的地方集中精力。
wribegjk2#
修改@mreinhardt解决方案以返回所有对
(text, link)
的列表(而不是dict):字符串
我在python 3中使用重复的链接进行测试:
型
bweufnob3#
你可以用几个简单的
re
模式来实现:字符串
然后你可以像这样使用它:
型