Вопрос о Python - дополнительный вызов - PullRequest
1 голос
/ 19 августа 2009

Я хочу добавить ссылки href ко всем словам с префиксом # или! или же @ Если это текст

Проверьте # бамбук и свяжитесь с @Fred re #bamboo # garden

следует преобразовать в:

Check the <a href="/what/bamboo">#bamboo</a> and contact <a href="/who/fred">@Fred</a> re <a href="/what/bamboo">#bamboo</a> <a href="/what/garden">#garden</a>

Обратите внимание, что # и @ идут в разные места.

Это насколько я могу, просто хеши ...

matched = re.sub("[#](?P<keyword>\w+)", \
    '<a href="/what/(?P=keyword)">(?P=keyword)</a>', \
    text)

Любой гуру, способный указать мне правильное направление. Нужно ли делать отдельные совпадения для каждого символа?

1 Ответ

5 голосов
/ 19 августа 2009

Я бы сделал это с одним совпадением и функцией, выбирающей «место». I.e.:

import re

places = {'#': 'what',
          '@': 'who',
          '!': 'why',
         }

def replace(m):
  all = m.group(0)
  first, rest = all[0], all[1:]
  return '<a href="/%s/%s">%s</a>' % (
    places[first], rest, all)

markedup = re.sub(r'[#!@]\w+', replace, text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...