Как сделать строку из регулярного выражения и значения группы - PullRequest
1 голос
/ 07 июня 2010

У меня есть регулярное выражение для URL профиля в твиттере и чей-то профиль в твиттере. Я могу легко извлечь имя пользователя из URL.

>>> twitter_re = re.compile('twitter.com/(?P<username>\w+)/')
>>> twitter_url = 'twitter.com/dir01/'
>>> username = twitter_re.search(twitter_url).groups()[0]
>>> _
'dir01'

Но если у меня есть регулярное выражение и имя пользователя, как мне получить URL?

Ответы [ 3 ]

1 голос
/ 07 июня 2010

Regexen - это не улица с двусторонним движением. Вы можете использовать их для разбора строк, но не для генерации строк обратно из результата. Вы, вероятно, должны искать другой способ вернуть URL-адреса, такие как базовая интерполяция строк или шаблоны URI (см. http://code.google.com/p/uri-templates/)

0 голосов
/ 07 июня 2010

Зачем вам для этого регулярное выражение - просто добавьте строки.

base_url = "twitter.com/"
twt_handle = "dir01"
twit_url = base_url + twt_handle
0 голосов
/ 07 июня 2010

Если вы не ищете общее решение для преобразования какого-либо регулярного выражения в строку форматирования, но то, что вы можете жестко закодировать:

twitter_url = 'twitter.com/%(username)s/' % {'username': 'dir01'}

... должно дать вам то, что вам нужно.

Если вам нужно более общее (но не невероятно надежное решение):

import re

def format_to_re(format):
    # Replace Python string formatting syntax with named group re syntax.
    return re.compile(re.sub(r'%\((\w+)\)s', r'(?P<\1>\w+)', format))

twitter_format = 'twitter.com/%(username)s/'
twitter_re = format_to_re(twitter_format)

m = twitter_re.search('twitter.com/dir01/')
print m.groupdict()
print twitter_format % m.groupdict()

Дает мне:

{'username': 'dir01'}
twitter.com/dir01/

И, наконец, немного большее и более полное решение, которое яЯ использую себя можно найти в Pattern класс здесь .

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