正则表达式用于查找链接文本并将其替换为文件名

时间:2016-12-17 16:27:53

标签: python regex

我有以下链接: <a href="domain.com/folder/subfolder/filename.html">domain.com/folder/subfolder/filename.html</a>

我想成功

  • <a href="http://www.domain.com/folder/subfolder/filename.html">filename</a>
  • <a href="domain.com/folder/subfolder/filename.html">domain.com/folder/subfolder/filename</a>

我对第一个案例的正则表达式是<a\s*([^>]+)>[^<>]*?/?([^<>/.]+)\.?[^<>]*?</\s*a\s*>并且它正在工作,我怀疑它是否有效并涵盖所有情况。

至于第二种情况,我没有设法让它发挥作用。

请注意,.html部分可能不存在或可以是任何扩展程序,http也可能不存在或者是httpsftp

UPD: 它应该删除网址参数,例如?param1=val1&param2=val2

1 个答案:

答案 0 :(得分:1)

(<a href="([^"?]*)[^"]*">)[^<]*(<\/a>)

  • (<a href="([^"?]*)[^"]*">) 第1组:包含开始标记的已捕获组
    • <a href="文字文字
    • ([^"?]*) 第2组:包含任意数量不是"?
    • 字符的已捕获组
    • [^"]*任意数量的非"字符(这将匹配参数,而不会在该组中捕获它)
    • ">文字文字
  • [^<]*任意数量的非<字符
  • (<\/a>) 第3组:包含结束标记的已捕获组

这适用于与您在帖子中展示的情况类似的情况。如果在某些情况下它不起作用,请将它们添加到帖子中,以便我们可以使用它们进行测试。

因此,您运行正则表达式,并替换为(Group 1, opening tag) + (Group 2, file path from href) + (Group 3, closing tag)