擅长:python、mysql、java
<p>我认为您需要区分什么是markdown中的有效链接,以及(可选)什么是有效url。
例如,标记中的有效链接也可以是相对路径,URL可能有也可能没有“http(s)”或“www”部分</p>
<p>只要使用<code>link_url = "http[s]?://.+"</code>甚至<code>link_url = ".*"</code>,代码就已经可以工作了。它将解决URL以括号结尾的问题,并且只意味着您依赖markdown结构<code>[]()</code>来查找链接。
验证URL是一个完全不同的讨论:<a href="https://stackoverflow.com/questions/827557/how-do-you-validate-a-url-with-a-regular-expression-in-python">How do you validate a URL with a regular expression in Python?</a></p>
<p>示例代码修复程序:</p>
<pre><code>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)
</code></pre>
<p>注意,我还调整了<code>link_name</code>,以防止标记文本中某个地方的单个“[”出现问题</p>