python正则表达式无法识别降价链接
我试图用python编写一个正则表达式,以在标记文本字符串中查找URL。 一旦找到url,我想检查它是否由标记链接包装:text 我对后者有意见。我正在使用regex-link\u exp-进行搜索,但结果并不是我所期望的,我无法理解它 这可能是我没有看到的简单的事情 下面是link_exp regex的代码和解释 我得到的输出仅为:python正则表达式无法识别降价链接,python,regex,markdown,Python,Regex,Markdown,我试图用python编写一个正则表达式,以在标记文本字符串中查找URL。 一旦找到url,我想检查它是否由标记链接包装:text 我对后者有意见。我正在使用regex-link\u exp-进行搜索,但结果并不是我所期望的,我无法理解它 这可能是我没有看到的简单的事情 下面是link_exp regex的代码和解释 我得到的输出仅为: http\:\/\/en\.wikipedia\.org\/wiki\/Vocoder 这意味着表达式只查找在右括号前有空格的链接。 这不仅是我想要的,而且
http\:\/\/en\.wikipedia\.org\/wiki\/Vocoder
这意味着表达式只查找在右括号前有空格的链接。
这不仅是我想要的,而且只有一个没有空格的案例链接应该被考虑
你觉得你能在这件事上帮我吗?干杯这里的问题是您的正则表达式首先要拉出URL,它包括
)
。这意味着您要查找两次右括号。这适用于除第一个以外的所有情况(节省空间)
我不太清楚URL正则表达式的每一部分都在尝试做什么,但下面的部分说:
[$-\@.&+]
,包括从$
(ASCII 36)到
(ASCII 137)的范围,其中包括大量您可能不是指的字符,包括)
与其查找URL,然后检查它们是否在链接中,为什么不同时查找两者?这样,您的URL正则表达式可能会更懒惰,因为额外的约束使它不太可能是任何其他内容:
# Anything that isn't a square closing bracket
name_regex = "[^]]+"
# http:// or https:// followed by anything but a closing paren
url_regex = "http[s]?://[^)]+"
markup_regex = '\[({0})]\(\s*({1})\s*\)'.format(name_regex, url_regex)
for match in re.findall(markup_regex, text):
print match
结果:
('Vocoder', 'http://en.wikipedia.org/wiki/Vocoder ')
('Turing', 'http://en.wikipedia.org/wiki/Alan_Turing')
('Autotune', 'http://en.wikipedia.org/wiki/Autotune')
如果需要更加严格,您可能可以改进URL正则表达式。Sidenote,您可以通过指定
re.VERBOSE
,在正则表达式内部添加注释。谢谢@Jon Betts它起作用了!简单的url正则表达式比我以前使用的非常复杂、难以理解的表达式更有意义。@Castro先生,你的代码太棒了。你能按照我的要求修改它以改变标记文件中的链接吗?提前感谢,,
('Vocoder', 'http://en.wikipedia.org/wiki/Vocoder ')
('Turing', 'http://en.wikipedia.org/wiki/Alan_Turing')
('Autotune', 'http://en.wikipedia.org/wiki/Autotune')