Python Language Regroupement


Exemple

Le regroupement se fait entre parenthèses. Le group() appelant group() renvoie une chaîne formée des sous-groupes entre parenthèses correspondants.

match.group() # Group without argument returns the entire match found
# Out: '123'
match.group(0) # Specifying 0 gives the same result as specifying no argument
# Out: '123'

Des arguments peuvent également être fournis à group() pour récupérer un sous-groupe particulier.

De la documentation :

S'il y a un seul argument, le résultat est une chaîne unique; s'il y a plusieurs arguments, le résultat est un tuple avec un élément par argument.

L'appel des groups() en revanche, renvoie une liste de tuples contenant les sous-groupes.

sentence = "This is a phone number 672-123-456-9910"
pattern = r".*(phone).*?([\d-]+)"

match = re.match(pattern, sentence)

match.groups()   # The entire match as a list of tuples of the paranthesized subgroups
# Out: ('phone', '672-123-456-9910')

m.group()        # The entire match as a string
# Out: 'This is a phone number 672-123-456-9910'

m.group(0)       # The entire match as a string
# Out: 'This is a phone number 672-123-456-9910'

m.group(1)       # The first parenthesized subgroup.
# Out: 'phone'

m.group(2)       # The second parenthesized subgroup.
# Out: '672-123-456-9910'

m.group(1, 2)    # Multiple arguments give us a tuple.
# Out: ('phone', '672-123-456-9910')

Groupes nommés

match = re.search(r'My name is (?P<name>[A-Za-z ]+)', 'My name is John Smith')
match.group('name')
# Out: 'John Smith'

match.group(1)
# Out: 'John Smith'

Crée un groupe de capture pouvant être référencé par nom et par index.

Groupes non capturés

L'utilisation de (?:) crée un groupe, mais le groupe n'est pas capturé. Cela signifie que vous pouvez l'utiliser en tant que groupe, mais cela ne polluera pas votre "espace de groupe".

re.match(r'(\d+)(\+(\d+))?', '11+22').groups()
# Out: ('11', '+22', '22')

re.match(r'(\d+)(?:\+(\d+))?', '11+22').groups()
# Out: ('11', '22')

Cet exemple correspond à 11+22 ou 11 , mais pas à 11+ . C'est depuis que le signe + et le second terme sont regroupés. Par contre, le signe + n'est pas capturé.