Два других, не упомянутых все же, являются Регистром , Открывают Season (о промышленности С открытым исходным кодом) и Полу Когерентное Вычисление (который свободно является об аппаратных средствах предприятия).
я не уверен, открывают ли, Season больше имеет участки, оставленные в нем, хотя, так как Ashley Vance (очевидный 'драйвер' подкаста) недавно оставил El Reg для Нью-Йорк таймс. Однако ценность прошлого года эпизодов являются большими и включают некоторых известных гостей.
«Магия регулярных выражений», которая вам нужна, - это просто 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-кодирование, или разрешить только один знак фунта (для фрагмента), или установить порядок между параметрами запроса и фрагментами. Однако этого должно быть достаточно, чтобы вы начали.
Решения, найденные в 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")
РЕДАКТИРОВАТЬ: С учетом ваших потребностей