Как вытащить наименование компании через регулярное выражение
Всем привет.
Как вытащить наименование компании через регулярное выражение.
Заранее благодарен!
Варианты (иногда через пробел и без пробела):
ООО 'РОГА'
ООО "РОГА"
ООО «РОГА»
import re
result = re.findall('(?i)(ооо|ип|зао)', 'привет ООО "РОГА" привет')
Ответы (2 шт):
- Аббревиатуры ОПФ оформляем как незахватываемую группу
(?:...) - Пробелы/кавычки любых типов перед между ОПФ и названием забираем как последовательность 1+ не-словесных (non-word) символов
\W+. Видов кавычек довольно много, чтобы их все не перечислять, можно применить такой подход. - Забираем последовательность 1+ словесных или пробельных символов
- В конце забираем 1 любой замыкающий символ
texts = """ООО 'РОГА'
ООО "РОГА"
пао «РОГА»
пао(РОГА)
пирога
ООО'РОГА и копыта'
"РОГА"
ООО «РОГА»
ип `иванов иван иванович`
привет ООО "РОГА" привет"""
print(*re.findall(r'(?:ооо|ип|зао|ao|пао)\W+[\w\s]+.', texts, re.IGNORECASE), sep='\n')
ООО 'РОГА'
ООО "РОГА"
пао «РОГА»
пао(РОГА)
ООО'РОГА и копыта'
ООО «РОГА»
ип `иванов иван иванович`
ООО "РОГА"
re.findall('((ооо|ип|зао)\s+[\'"«].*?[\'"»])', 'привет ООО "РОГА" привет', re.I)
Объяснение
Сразу упомяну что я использовать флаг re.I (то же самое что иre.IGNORECASE), который делает нас независимым от кейса букв в строке, то-есть на важно будут буквы заглавные или нет. Теперь начнём с регулярного выражения. В начале мы матчим группу строк, если у нас совпадение, продолжаем. Дальше мы матчим пробел, должен быть как минимум 1 пробел, можно писать больше, это нам обеспечивает символ +, после \s (whitespace). Далее, в квадратных скобках мы вписываем диапазон символов которые могут совпасть, само название может быть любым, главное, чтобы слева и справа были бы кавычки.