Как разобрать строку, содержащую URL, поменяв их на правильные ссылки - PullRequest
1 голос
/ 03 декабря 2010

Допустим, у меня есть следующая строка из твиттера:

"This is my sample test blah blah <a href="http://t.co/pE6JSwG" rel="nofollow">http://t.co/pE6JSwG</a>, 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)

Ответы [ 2 ]

1 голос
/ 03 декабря 2010
>>> 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, поскольку может не быть хорошего способа узнать, когда заканчивается URL. Если вам гарантировано иметь строку с одинаковым форматом каждый раз, это решение будет работать. Вы также можете всегда получать URL одинаковой длины, в этом случае вы можете найти http и впоследствии собрать подстроку этой длины.

1 голос
/ 03 декабря 2010

Возможно, вы можете получить вдохновение из исходного кода проекта django-oembed .

...