Nem rögzítő zárójelek a Python reguláris kifejezéseiben
A ( ) zárójelek két funkciót töltenek be -
a karakterek csoportosítását és a zseb (capturing group) funkciót. De
mit tegyünk, ha csoportosítanunk kell, de
nem akarunk a zsebbe helyezni? A probléma megoldására
kifejlesztették a speciális nem rögzítő zárójeleket (?: ) - ezek csoportosítanak,
de nem helyeznek a zsebbe.
Példa
A következő példában az első zárójelek a csoportosításhoz kellenek, a másodikak pedig a zsebhez. Azonban mindkét zárójel elhelyezi az adatokat a zsebben:
txt = 'abab123'
res = re.search('(ab)+([1-9]+)', txt)
Ennek eredményeképpen a zsebeinkben a következő lesz:
print(res[0]) # kiírja 'abab123'
print(res[1]) # kiírja 'ab'
print(res[2]) # kiírja '123'
Példa
Változtassuk meg úgy, hogy az első zárójelpár csak csoportosítson, de ne helyezzen a zsebbe:
txt = 'abab123'
res = re.search('(?:ab)+([1-9]+)', txt)
Ennek eredményeképpen az első zsebben a számunk lesz:
print(res[1]) # kiírja '123'