Python Regex:用HTML链接替换字符串中的所有url,但不包括.png,.gif,.jpg,.jpeg

时间:2018-07-13 17:07:12

标签: python regex replace

我有一个很大的多行字符串,该行的任何位置都可能包含很多非常不同的url,例如:

La-la-la https://example.com/ https://example.com/ https://example.com/ la-la-la https://example.com/ la-la-la https://example.com/ la-la-la

我需要将它们全部替换为<a href="https://example.com/">https://example.com/</a>

条件:

  • URL-以https?://开头,一直到整个字符串的空格/换行符/末尾的所有内容。

  • 但是。严格以.png,.gif,.jpg,.jpeg结尾的网址在任何情况下都不应匹配(以后将被标记替换)

2 个答案:

答案 0 :(得分:2)

您可以使用re.sub

import re
def href(d, skip = ['.png', '.gif', '.jpg', '.jpeg']):
  return f'<a href="{d}">{d}</a>' if not re.findall('|'.join(skip), d) else d

s = """
La-la-la https://example.com/ https://example.com/
https://example.com/ la-la-la https://example.com/
la-la-la https://example.com/ la-la-la
"""
new_s = re.sub('https*://.*?(?=[\s$])', lambda x:href(x.group()), s)

输出:

La-la-la <a href="https://example.com/">https://example.com/</a> <a href="https://example.com/">https://example.com/</a> <a href="https://example.com/">https://example.com/</a> la-la-la <a href="https://example.com/">https://example.com/</a> la-la-la <a href="https://example.com/">https://example.com/</a> la-la-la

答案 1 :(得分:1)

`badtags = ['.png', '.gif', 'jpg', 'jpeg']
 goodurls = ['https://', 'http://']
 for line in string:
     for word in line.strip().split():
         if(word[0:7] == 'https://' or word[0:6] == 'http://'):
             if(not word[-4:] in badtags):
                 // replace logic
`

这是一种非常简单的方法,您可能必须使用常规的for循环迭代才能对原始数组建立索引。