假设我有来自twitter的以下字符串:
"This is my sample test blah blah http://t.co/pE6JSwG, hello all"
如何解析此字符串,将此链接更改为<a href="link">link</a>
?这是一个解析用户标签的代码:
tweet = s.text;
user_regex = re.compile(r'@[0-9a-zA-Z+_]*',re.IGNORECASE)
for tt in user_regex.finditer(tweet):
url_tweet = tt.group(0).replace('@','')
tweet = tweet.replace(tt.group(0),
'<a href="http://twitter.com/'+
url_tweet+'" title="'+
tt.group(0)+'">'+
tt.group(0)+'</a>')
我现在正在使用url的正则表达式:
http_regex = re.compile(r'[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]*', re.IGNORECASE)
答案 0 :(得分:1)
也许你可以从django-oembed项目的源代码中获得灵感。
答案 1 :(得分:1)
>>> test = "This is my sample test blah blah http://t.co/pE6JSwG, hello all"
>>> re.sub('http://[^ ,]*', lambda t: "<a href='%s'>%s</a>" % (t.group(0), t.group(0)), test)
>>> This is my sample test blah blah <a href='http://t.co/pE6JSwG'>http://t.co/pE6JSwG</a>, hello all
仅当您将逗号和空格等字符视为网址的有效停靠点时才有效。
一般情况下,您可能不应该使用正则表达式进行网址匹配,因为可能没有一种好方法可以知道URL何时结束。如果您保证每次都有一个具有相同格式的字符串,则此解决方案将起作用。您也可能总是获得相同长度的URL,在这种情况下,您可以查找http并在之后收集该长度的子字符串。