Как извлечь фактическую цитату и автора из цитат с помощью регулярных выражений? - PullRequest
0 голосов
/ 04 апреля 2019

Я собираю цитаты из Твиттера, и из этих цитат я хочу отделить реальную цитату от ее автора.

Как мне это сделать, если твиты не имеют одинакового формата?

Я новичок в regex, но вот моя лучшая попытка в regex101 https://regex101.com/r/m3WtmX/5.

И ниже код, который я имею, я хочу, чтобы каждый цикл печатал sre.SRE_Match object, но последний печатает None.

import re

QUOTE_PATTERN = re.compile(r'^(?P<actual_quote>.*)\s+?-\s*(?P<author>.*)$')

# actual_quote is separated from author by space and dash
format_1 = "Any form of exercise, if pursued continuously, will help train us in perseverance -Mao Tse-Tung"

# separated by one space, dash and another space
format_2 = "Any form of exercise, if pursued continuously, will help train us in perseverance - Mao Tse-Tung"

# actual_quote is surrounded with double quotes character and
# is separated from author by space, dash and another space
format_3 = '"Any form of exercise, if pursued continuously, will help train us in perseverance" - Mao Tse-Tung'

# separated only with dash (no space)
format_4 = "Any form of exercise, if pursued continuously, will help train us in perseverance-Mao Tse-Tung"

for format in [format_1, format_2, format_3, format_4]:
    print(QUOTE_PATTERN.match(format))

1 Ответ

0 голосов
/ 04 апреля 2019

Это действительно сложно, поскольку структура этих данных не регулярная .

Получение всех символов первой группы перед чертой не жадным образом работает с предоставленными вами кавычками.

^(?P<actual_quote>.*?)-(?P<author>.*)$

https://regex101.com/r/rcGzzK/2

Если вы не хотите включать дополнительные пробелы:

^(?P<actual_quote>.*?)\s*-\s*(?P<author>.*)$

https://regex101.com/r/rcGzzK/3

К сожалению, если в самой кавычке есть какие-либо тире, то регулярные выражения выше не будут работать.

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