Рассмотрим эту (очень упрощенную) примерную строку:
1aw2,5cx7
Как вы можете видеть, это два значения digit/letter/letter/digit
, разделенные запятой.
Теперь я мог бы сопоставить это со следующим:
>>> from re import match
>>> match("\d\w\w\d,\d\w\w\d", "1aw2,5cx7")
<_sre.SRE_Match object at 0x01749D40>
>>>
Проблема заключается в том, что я должен написать \d\w\w\d
дважды. С небольшими узорами это не так плохо, но с более сложными регулярными выражениями, написав то же самое дважды, вы делаете окончательный шаблон огромным и громоздким. Это также кажется излишним.
Я попытался использовать именованную группу захвата:
>>> from re import match
>>> match("(?P<id>\d\w\w\d),(?P=id)", "1aw2,5cx7")
>>>
Но это не сработало, потому что он искал два вхождения 1aw2
, а не digit/letter/letter/digit
.
Есть ли способ сохранить часть шаблона, например \d\w\w\d
, поэтому его можно использовать последним в одном шаблоне? Другими словами, можно ли повторно использовать под-шаблон в шаблоне?