Powiększyć wyrażenie, które chcesz powtórzyć w nawiasach. Na przykład, jeśli chcesz 5 powtórzeń ABC
:
(ABC){5}
Albo jeśli chcesz dowolną liczbę powtórzeń (0 lub więcej):
(ABC)*
lub jeden lub więcej powtórzeń:
(ABC)+
edytuj aby odpowiedzieć na aktualizację
Nawiasy w wyrażeniach regularnych robią dwie rzeczy; grupują sekwencję elementów w wyrażeniu regularnym, dzięki czemu można zastosować operator do całej sekwencji, a nie tylko do ostatniego elementu, i przechwytują zawartość tej grupy, aby wyodrębnić podciąg dopasowany przez to podwyrażenie w wyrażeniu regularnym.
Można zagnieżdżać nawiasy; są liczone od pierwszego otwarcia. Na przykład:
>>> re.search('[0-9]* (ABC(...))', '123 ABCDEF 456').group(0)
'123 ABCDEF'
>>> re.search('[0-9]* (ABC(...))', '123 ABCDEF 456').group(1)
'ABCDEF'
>>> re.search('[0-9]* (ABC(...))', '123 ABCDEF 456').group(2)
'DEF'
Jeśli chcesz uniknąć przechwytywania podczas grupowania, można użyć (?:
. Może to być pomocne, jeśli nie chcesz nawiasów, które są używane do grupowania sekwencji w celu zastosowania operatora, aby zmienić numerację swoich dopasowań. Jest także szybszy.
>>> re.search('[0-9]* (?:ABC(...))', '123 ABCDEF 456').group(1)
'DEF'
Tak aby odpowiedzieć na aktualizację, tak, można używać zagnieżdżonych grup przechwytywania, lub nawet uniknąć robienia z wewnętrzną grupy na wszystkich:
>>> re.search('((?:ABC){5})(DEF)', 'ABCABCABCABCABCDEF').group(1)
'ABCABCABCABCABC'
>>> re.search('((?:ABC){5})(DEF)', 'ABCABCABCABCABCDEF').group(2)
'DEF'
Użyłbym tutaj + zamiast *, ponieważ * będzie pasowało do 0 wystąpień (ABC). – Robusto
(ABC) {3,5} również dla szeregu powtórzeń –
Oh duh. Myślałem() z jakiegoś powodu jest używany tylko do tego uchwycenia. Ale to ma sens. Wybrany jako pierwszy – Falmarri