Получение действительных имен twitter с помощью модуля re в Python - PullRequest
1 голос
/ 05 мая 2020

1. Справочная информация

У меня есть строка, которая содержит действительные и недопустимые имена пользователей Twitter как таковые:

@moondra2017.org,@moondra,Python@moondra,@moondra_python

В приведенной выше строке @ moondra и @ moondra_ python являются допустимыми именами пользователей. Остальные - нет.

1.1 Цель

Используя \ b и / или \ B как часть шаблона регулярного выражения, мне нужно извлечь действительные имена пользователей.

PS Я должен использовать \ b и / или \ B как часть регулярного выражения, что является частью этой цели.

2. Моя неудачная попытка

import re

# (in)valid twitter user names
un1 = '@moondra2017.org' # invalid
un2 = '@moondra'        # << valid, we want this
un3 = 'Python@moondra'   # invalid
un4 = '@moondra_python' # << validwe want this

string23 = f'{un1},{un2},{un3},{un4}'

pattern = re.compile(r'(?:\B@\w+\b(?:[,])|\B@\w+\b)')  # ??
print('10:', re.findall(pattern, string23))  # line 10

2.1 Наблюдается : Приведенный выше код выводит:

10: ['@ moondra2017', '@moondra, ',' @ moondra_ python '] # неверно

2.2 Ожидается:

10: [' @moondra ',' @moondra_ python '] # правильно

1 Ответ

2 голосов
/ 06 мая 2020

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

Затем, чтобы соответствовать концу упоминания, вам нужно использовать границу запятой, (?![^,]) или менее эффективный, но удобный для онлайн-тестирования (?=,|$).

pattern = re.compile(r'\B@\w+\b(?![^,])')
pattern = re.compile(r'\B@\w+\b(?=,|$)')

См. демонстрацию регулярных выражений и Python демонстрацию

Подробности

  • \B - граница без слова, сразу слева от текущего местоположения должно быть начало строки или символ без слова
  • @ - a @ char
  • \w+ - 1+ символов слова (буквы, цифры или _)
  • \b - граница слова (следующий символ должен быть символом, отличным от слова, или концом строки)
  • (?![^,]) - следующий символ не может быть символом, отличным от , (поэтому он должен быть , или концом строки).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...