<p>对于这些类型的URL,您需要一种只有较新的<code>regex</code>模块支持的递归方法:</p>
<pre><code>import regex as re
data = """
It's very easy to make some words **bold** and other words *italic* with Markdown.
You can even [link to Google!](http://google.com)
[a link](https://www.wiki.com/atopic_(subtopic))
"""
pattern = re.compile(r'\[([^][]+)\](\(((?:[^()]+|(?2))+)\))')
for match in pattern.finditer(data):
description, _, url = match.groups()
print(f"{description}: {url}")
</code></pre>
<p>这就产生了</p>
<pre><code>link to Google!: http://google.com
a link: https://www.wiki.com/atopic_(subtopic)
</code></pre>
<p>见<a href="https://regex101.com/r/qLAk7Y/1" rel="nofollow noreferrer"><strong>a demo on regex101.com</strong></a></p>
<hr/>
<p>这种神秘的小美可以归结为</p>
<pre><code>\[([^][]+)\] # capture anything between "[" and "]" into group 1
(\( # open group 2 and match "("
((?:[^()]+|(?2))+) # match anything not "(" nor ")" or recurse group 2
# capture the content into group 3 (the url)
\)) # match ")" and close group 2
</code></pre>
<hr/>
<p><strong>注意</strong>:这种方法的问题是,它无法用于URL等</p>
<pre><code>[some nasty description](https://google.com/()
# ^^^
</code></pre>
<p>这在降价中肯定是完全有效的。如果您要遇到任何这样的URL,请使用适当的解析器</p>