Найти слова между запятой и списком ключевых слов RegEx - PullRequest
0 голосов
/ 31 августа 2018

У меня большой текст. Я хотел бы найти адрес владельца. Мой вклад похож на ...

INPUT: (...) seiscientos catorce guión ocho, domiciliado en calle Santillana número trescientos sesenta y nueve, Valle Lo Campino, Comuna de Quilicura, Región Metropolitana, учредительный офис por acciones (...)

keywords_cap = ['DOMICILIO:', 'Domicilio:', 'Domicilio', 'DOMICILIO', 'domiciliado en', 'domiciliada en',
                                        'Domiciliado en', 'Domiciliada en']
keywords_cap = map(re.escape, keywords_cap)
keywords_cap.sort(key=len, reverse=True)
obj = re.compile(r'\b(?:{})\s*(.*?)\.'.format('|'.join(keywords_cap)))
obj2 = obj.search(mensaje)
if obj2:
   company_name = obj2.group(1)
else:
   company_name = "None"

РЕЗУЛЬТАТ: calle Santillana número trescientos sesenta y nueve

Что-то не так, потому что я хотел бы выделить текст между одним словом ключевых слов и следующей запятой (,) или следующей точкой (.).

Но извлечение ведется с этого списка ключевых слов только до следующей точки (.).

Может ли кто-нибудь помочь мне с этой глупостью?

1 Ответ

0 голосов
/ 31 августа 2018

Шаблон (.*?)\. соответствует любым символам, кроме символов разрыва строки, как можно меньше перед самым левым символом .. Его можно «преобразовать» в ([^.]*), шаблон класса отрицательных символов , который соответствует 0 или более символам, отличным от . (обратите внимание, что единственным отличием от исходного шаблона является то, что классы отрицательных символов также совпадают переносы строк, что является хорошей особенностью в данном случае).

Решением будет просто добавить , в класс символов:

obj = re.compile(r'\b(?:{})\s*([^.,]*)'.format('|'.join(keywords_cap))) 
                              ^^^^^^^^

регулярное выражение будет выглядеть как

\b(?:DOMICILIO:|Domicilio:|Domicilio|DOMICILIO|domiciliado en|domiciliada en|Domiciliado en|Domiciliada en)\s*([^.,]*)

См. Демонстрационную версию regex .

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