Регулярное выражение Python для поиска подстроки

#python #regex #string

#python #Регулярное выражение #строка

Вопрос:

Я пытаюсь извлечь подстроки из длинной строки в python3

 def get_data(text):
    initials = text.split()[1]
    names = re.search(initials '(.*)EMP',text).group(1).lstrip().title()

    return initials, names
 

Мне нужны следующие результаты

 x,y = get_data('J JS JOHN SMITH EMP 223456')
JS
John Smith 

x,y = get_data('J JB JOE BLOGGS CONT 223456')
JB
Joe Bloggs

x,y = get_data('J JS JOHN SMITH 223456')
JS
John Smith
 

Я могу сделать это с помощью EMP или CONT, но я изо всех сил пытаюсь сделать это с помощью EMP ИЛИ CONT ИЛИ ‘None’
Я новичок в регулярных выражениях, поэтому помощь оценена

Ответ №1:

Нет необходимости делать разделение, а затем искать.

Вы можете использовать одно регулярное выражение в re.findall или re.search или re.match :

 ^S s (S )s (. ?)(?:s (?:EMP|CONT))?s d 
 

Демонстрация регулярных выражений

Подробности регулярного выражения:

  • ^ : Начать
  • S : Сопоставление 1 пробелов без пробелов
  • s : Сопоставьте 1 пробелы
  • (S ) : Сопоставьте 1 пробелов и зафиксируйте в группе #1
  • s : Должно сопровождаться 1 пробелами
  • (. ?) : Сопоставьте 1 любого персонажа и захватите в группу №2
  • (?:s (?:EMP|CONT))? : необязательно совпадать EMP или CONT после 1 пробелов
  • s d : За которым следует 1 пробелов и 1 цифр.