регулярное выражение Python для ретвитов

1

Я работаю над регулярным выражением, которое будет извлекать ключевые слова и имена пользователей из твитов. здесь пример, с довольно страшным регулярным выражением, чтобы выполнить эту работу:

tweet='foobar RT@one, @two: @three barfoo'
m=re.search(r'(RT|retweet|from|via)\b\W*@(\w+)\b\W*@(\w+)\b\W*@(\w+)\b\W*',tweet)
m.groups()
('RT', 'one', 'two', 'three')

то, что я хотел бы, состоит в том, чтобы конденсировать повторяющиеся шаблоны \b\W*@(\w+)\b\W* и сделать их переменным числом, так что если @four были добавлены после @three, он также будет извлечен. Я пробовал много перестановок, чтобы повторить это с помощью + безуспешно.

Мне также понравилось бы работать над чем-то вроде

tweet='foobar RT@one, RT @two: RT @three barfoo';

который может быть достигнут с помощью re.finditer, если шаблоны не перекрываются. (у меня есть версия, в которой шаблоны перекрываются, и поэтому получает только первый RT).

любая помощь приветствуется. спасибо.

  • 0
    Я думаю, что здесь ответили: stackoverflow.com/questions/558105/…
  • 0
    Нм, это только частичные ответы из-за требования здесь для RT / ретвита, извините.
Показать ещё 1 комментарий
Теги:
twitter

1 ответ

3

Try

(RT|retweet|from|via)(?:\b\W*@(\w+))+'

Включение \b\W*@(\w+) in '(?:...) `позволяет группировать термины для повторения без захвата совокупности.

Я не уверен, что следую второй части вашего вопроса, но я думаю, что вы можете искать что-то с конструкцией вроде:

(?:(?!RT|@).)

который будет соответствовать любому символу, который не является "@" или началом "RT", снова без его захвата.

В этом случае, как насчет:

(RT|retweet|from|via)((?:\b\W*@\w+)+)

а затем отправить процесс

re.split(r'@(\w+)' ,m.groups()[1])

Чтобы получить отдельные дескрипторы?

  • 0
    Спасибо за быстрый ответ! к сожалению, это, похоже, не работает, если я что-то не опечатал: tweet = 'foobar RT @ one, @two: @three barfoo' m = re.search (r '(RT | retweet | from | via) (? : \ b \ W * @ (\ w +)) + ', чирикать) m.groups () (' RT ',' three '), но я буду читать дальше (?: ...). Благодарю.
  • 0
    спасибо Маркус. По сути, я закончил тем, что выбрал метод, подобный этому, но был обеспокоен тем, что не смог придумать решение с одним регулярным выражением. ценить это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню