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

#python #regex

#python #регулярное выражение

Вопрос:

Я работаю над извлечением буквенно-цифровых данных из строк, таких как

 ABCADE12345ZYX
LMNADE12345ZXY
 

Мне нужно извлечь ADE12345 из первой строки и ADE12345 из второй строки.

Я попытался использовать следующее регулярное выражение:

 [ABC|LMN] (w )Z.*
 

Но это приводит к DE12345 для первого случая и DE12345 для второго случая.

Как я могу получить ожидаемые совпадения ADE12345 с ADE12345 использованием Python re ?

Комментарии:

1. Вы путаете класс символов и группы

Ответ №1:

Используйте это регулярное выражение:

 (?:ABC|LMN)(w )Z
 

Смотрите Доказательство.

Объяснение

 --------------------------------------------------------------------------------
  (?:                      group, but do not capture:
--------------------------------------------------------------------------------
    ABC                      'ABC'
--------------------------------------------------------------------------------
   |                        OR
--------------------------------------------------------------------------------
    LMN                      'LMN'
--------------------------------------------------------------------------------
  )                        end of grouping
--------------------------------------------------------------------------------
  (                        group and capture to 1:
--------------------------------------------------------------------------------
    w                       word characters (a-z, A-Z, 0-9, _) (1 or
                             more times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
  )                        end of 1
--------------------------------------------------------------------------------
  Z                        'Z'
 

Код Python:

 import re
txt = 'ABCADE12345ZYX and LMNADE12345ZXY'
print(re.findall(r'(?:ABC|LMN)(w )Z', txt))
# ['ADE12345', 'ADE12345']
 

Комментарии:

1. Можете ли вы взглянуть на редактирование, мне это нужно для обработки нескольких разных случаев