Вы можете использовать это регулярное выражение,
[a-zA-Z]+(?:_[a-zA-Z]+)*$
Все названия вашей компании начинаются с алфавитных слов и дефиса, разделенных до конца строки, для которых вышеупомянутое регулярное выражение будет работать нормально.
Здесь [a-zA-Z]+
начинает сопоставлять алфавитные названия компаний, а (?:_[a-zA-Z]+)*
далее сопоставляет любые алфавитные слова с дефисом перед ними, а $
обеспечивает совпадение совпадающей строки со строкой.
Regex Demo
код Python,
import re
arr = ['Q4_2017_American_Airlines_Group_Inc','Q1_2016_Apple_Inc','Q4_2014_Alcoa_Inc','Q3_2015_Arconic_Inc','Q3_2017_Orkla_ASA','Q2_2018_AGCO_Corp','Quarter_3_2018_Autodesk_Inc']
for s in arr:
m = re.search(r'[a-zA-Z]+(?:_[a-zA-Z]+)*$', s)
print(s, '-->', m.group())
печать
Q4_2017_American_Airlines_Group_Inc --> American_Airlines_Group_Inc
Q1_2016_Apple_Inc --> Apple_Inc
Q4_2014_Alcoa_Inc --> Alcoa_Inc
Q3_2015_Arconic_Inc --> Arconic_Inc
Q3_2017_Orkla_ASA --> Orkla_ASA
Q2_2018_AGCO_Corp --> AGCO_Corp
Quarter_3_2018_Autodesk_Inc --> Autodesk_Inc
Кроме того, если у вас есть одна строка из названий этих компаний, вы можете использовать следующий код и использовать re.findall
для отображения всех названий компаний,
import re
s = '''Q4_2017_American_Airlines_Group_Inc
Q1_2016_Apple_Inc
Q4_2014_Alcoa_Inc
Q3_2015_Arconic_Inc
Q3_2017_Orkla_ASA
Q2_2018_AGCO_Corp
Quarter_3_2018_Autodesk_Inc'''
print(re.findall(r'(?m)[a-zA-Z]+(?:_[a-zA-Z]+)*$', s))
печать
['American_Airlines_Group_Inc', 'Apple_Inc', 'Alcoa_Inc', 'Arconic_Inc', 'Orkla_ASA', 'AGCO_Corp', 'Autodesk_Inc']
Edit:
Как подчеркнул Чингиз Акматов, если имя может содержать цифры и вообще любой символ, то это регулярное выражение получит имя правильно, что предполагает, что название компании начинается после части года и подчеркивания.
(?<=\d{4}_).*$
Демонстрация обработки любого символа в названии компании