Non-capturing parentheses in Python regex
Заградите ( ) имаат две функции -
групирање на знаци и функција на capturing group. А
што да правите ако треба да групирате, но
да не зачувате во capturing group? За решавање на таков
проблем се направени специјални non-capturing
parentheses (?: ) - тие групираат,
но не зачувуваат во capturing group.
Пример
Во следниот пример, првите загради ни се потребни за групирање, а вторите - за capturing group. Сепак, и едните и другите загради зачувуваат податоци во capturing group:
txt = 'abab123'
res = re.search('(ab)+([1-9]+)', txt)
Како резултат, во нашите capturing groups ќе има следното:
print(res[0]) # ќе испечати 'abab123'
print(res[1]) # ќе испечати 'ab'
print(res[2]) # ќе испечати '123'
Пример
Да ги направиме првите загради така што само групираат, но не зачувуваат во capturing group:
txt = 'abab123'
res = re.search('(?:ab)+([1-9]+)', txt)
Како резултат, во првиот capturing group ќе биде нашето број:
print(res[1]) # ќе испечати '123'