Использование функции Regex Plus в Python для кодирования и замены - PullRequest
0 голосов
/ 13 ноября 2008

Я пытаюсь заменить что-то в строке в python, и у меня возникли некоторые проблемы. Вот что я хотел бы сделать.

Для данного комментария в моем сообщении:

"here are some great sites that i will do cool things with! https://stackoverflow.com/it's a pig & http://google.com"

Я бы хотел использовать python для создания таких строк:

"here are some great sites that i will do cool things with! <a href="http://stackoverflow.com">http%3A//stackoverflow.com</a> &amp; <a href="http://google.com">http%3A//google.com</a> 

Вот что у меня пока ...

import re
import urllib

def getExpandedURL(url)
    encoded_url = urllib.quote(url)
    return "<a href=\"<a href="+url+"\">"+encoded_url+"</a>"

text = '<text from above>'
url_pattern = re.compile('(http.+?[^ ]+', re.I | re.S | re.M)
url_iterator = url_pattern.finditer(text)
for matched_url in url_iterator:
    getExpandedURL(matched_url.groups(1)[0])

Но это то, где я застрял. Ранее я видел такие вещи, как здесь: Регулярные выражения, но для записи в совпадении , но, безусловно, должен быть лучший способ, чем перебирать каждое совпадение и выполнять замену позиции на них. Сложность здесь в том, что это не прямая замена, но мне нужно сделать что-то конкретное с каждым совпадением перед его заменой.

1 Ответ

3 голосов
/ 13 ноября 2008

Я думаю, что вы хотите url_pattern.sub(getExpandedURL, text).

re.sub (pattern, repl, string, count = 0)

Возвращает строку, полученную путем замены крайнего левого не перекрывающегося вхождения шаблона в строке заменой repl. repl может быть либо строкой, либо вызываемой; если он вызывается, ему передается объект сопоставления, и он должен возвращать заменяющую строку для использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...