#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'
import re
txt = 'ABCADE12345ZYX and LMNADE12345ZXY'
print(re.findall(r'(?:ABC|LMN)(w )Z', txt))
# ['ADE12345', 'ADE12345']
Комментарии:
1. Можете ли вы взглянуть на редактирование, мне это нужно для обработки нескольких разных случаев