我有一个很大的多行字符串,该行的任何位置都可能包含很多非常不同的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结尾的网址在任何情况下都不应匹配(以后将被标记替换)
答案 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循环迭代才能对原始数组建立索引。