регулярное выражение для извлечения данных в середине строки, которая имеет предшествующую запятую + пробел и заканчивается пробелом + (заглавная X) - PullRequest
1 голос
/ 14 июля 2020

У меня есть строка, из которой я пытаюсь извлечь регулярное выражение. Вот пример моей строки:

splitm = 'SM Analyst, AMT Tax Company X Hi.'

Я хочу разобрать имя как "SM Analyst", компанию как "AMT Tax Company" и данные после X как "Hi."

Мое регулярное выражение для анализа имени выглядит следующим образом:

x = re.match('^.*?\,', splitm) 

Для компании, которую я пытаюсь: (все после запятой, но не работает) y = re.match('^\,(.*?)', splitm).

Есть указания на то, что я здесь делаю не так?

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Попробуйте это:

import re

splitm = 'SM Analyst, AMT Tax Company X Hi.'

print(re.findall('(?<=, ).*(?= [A-Z] )',splitm)) # Find string that is between a ', ' and a uppercase letter that has a space on both sides
print(re.findall('(?<= )\w+\.',splitm)) # Find word character string that is between a ' ' and a '.'

Вывод:

['AMT Tax Company']
['Hi.']
0 голосов
/ 14 июля 2020

Каретка (^) соответствует позиции перед первым символом в строке.

Это не обязательно, если вы не используете re.MULTILINE, потому что вы используете re.match :

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

Решение

Мы можем использовать именованные группы, чтобы поймать соответствующие части в одном регулярном выражении, а затем использовать groupdict для получения результатов в виде словаря:

import re

REGEX = r'(?P<role>.+?),\s+(?P<company>.+?)\s+X\s+(?P<message>.+)'
re.match(REGEX, "SM Analyst, AMT Tax Company X Hi.").groupdict()

{'role': 'SM Analyst', 'company': 'AMT Tax Company', 'message': 'Hi.'}

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