Обнаружьте URL в строке и перенеситесь с “<href …” тег

Два других, не упомянутых все же, являются Регистром , Открывают Season (о промышленности С открытым исходным кодом) и Полу Когерентное Вычисление (который свободно является об аппаратных средствах предприятия).

я не уверен, открывают ли, Season больше имеет участки, оставленные в нем, хотя, так как Ashley Vance (очевидный 'драйвер' подкаста) недавно оставил El Reg для Нью-Йорк таймс. Однако ценность прошлого года эпизодов являются большими и включают некоторых известных гостей.

8
задан Gringo Suave 12 January 2014 в 11:22
поделиться

2 ответа

«Магия регулярных выражений», которая вам нужна, - это просто sub (который выполняет подстановку):

def encode_string_with_links(unencoded_string):
  return URL_REGEX.sub(r'<a href="\1">\1</a>', unencoded_string)

URL_REGEX может быть примерно таким:

URL_REGEX = re.compile(r'''((?:mailto:|ftp://|http://)[^ <>'"{}|\\^`[\]]*)''')

Это довольно свободное регулярное выражение для URL-адресов: оно позволяет использовать схемы mailto, http и ftp, и после этого в значительной степени просто продолжает работать до тех пор, пока не встретит «небезопасный» символ (кроме процента, который вы хотите разрешить для экранирования). Если нужно, можно сделать его более строгим. Например, вы можете потребовать, чтобы за процентами следовало допустимое шестнадцатеричное escape-кодирование, или разрешить только один знак фунта (для фрагмента), или установить порядок между параметрами запроса и фрагментами. Однако этого должно быть достаточно, чтобы вы начали.

9
ответ дан 5 December 2019 в 10:04
поделиться

Решения, найденные в Google:

#---------- find_urls.py----------#
# Functions to identify and extract URLs and email addresses

import re

def fix_urls(text):
    pat_url = re.compile(  r'''
                     (?x)( # verbose identify URLs within text
         (http|ftp|gopher) # make sure we find a resource type
                       :// # ...needs to be followed by colon-slash-slash
            (\w+[:.]?){2,} # at least two domain groups, e.g. (gnosis.)(cx)
                      (/?| # could be just the domain name (maybe w/ slash)
                [^ \n\r"]+ # or stuff then space, newline, tab, quote
                    [\w/]) # resource name ends in alphanumeric or slash
         (?=[\s\.,>)'"\]]) # assert: followed by white or clause ending
                         ) # end of match group
                           ''')
    pat_email = re.compile(r'''
                    (?xm)  # verbose identify URLs in text (and multiline)
                 (?=^.{11} # Mail header matcher
         (?<!Message-ID:|  # rule out Message-ID's as best possible
             In-Reply-To)) # ...and also In-Reply-To
                    (.*?)( # must grab to email to allow prior lookbehind
        ([A-Za-z0-9-]+\.)? # maybe an initial part: DAVID.mertz@gnosis.cx
             [A-Za-z0-9-]+ # definitely some local user: MERTZ@gnosis.cx
                         @ # ...needs an at sign in the middle
              (\w+\.?){2,} # at least two domain groups, e.g. (gnosis.)(cx)
         (?=[\s\.,>)'"\]]) # assert: followed by white or clause ending
                         ) # end of match group
                           ''')

    for url in re.findall(pat_url, text):
       text = text.replace(url[0], '<a href="%(url)s">%(url)s</a>' % {"url" : url[0]})

    for email in re.findall(pat_email, text):
       text = text.replace(email[1], '<a href="mailto:%(email)s">%(email)s</a>' % {"email" : email[1]})

    return text

if __name__ == '__main__':
    print fix_urls("test http://google.com asdasdasd some more text")

РЕДАКТИРОВАТЬ: С учетом ваших потребностей

8
ответ дан 5 December 2019 в 10:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: