代码之家  ›  专栏  ›  技术社区  ›  MaxCore

Python正则表达式:用HTML链接替换字符串中的所有URL。巴布亚新几内亚。gif。jpg。jpeg

  •  0
  • MaxCore  · 技术社区  · 8 年前

    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?:// 直到整个字符串的空格/换行符/结束。

    • 但是URL,严格以结尾。巴布亚新几内亚。gif。jpg。jpeg在任何情况下都不应匹配(稍后将用标记替换)

    2 回复  |  直到 8 年前
        1
  •  2
  •   Ajax1234    8 年前

    你可以用 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
    
        2
  •  1
  •   Zach    8 年前
    `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循环迭代来索引原始数组。