web-dev-qa-db-fra.com

Capturez des groupes avec une expression régulière (Python)

Une sorte de noob ici, je m'excuse si je fais un faux pas.

J'apprends des expressions régulières et suis sur cette leçon: https://regexone.com/lesson/capturing_groups .

Dans l'interpréteur python, j'essaie d'utiliser les parenthèses pour capturer uniquement ce qui précède la partie .pdf de la chaîne de recherche, mais mon résultat le capture malgré l'utilisation des parenthèses. Que fais-je de mal?

import re
string_one = 'file_record_transcript.pdf'
string_two = 'file_07241999.pdf'
string_three = 'testfile_fake.pdf.tmp'

pattern = '^(file.+)\.pdf$'
a = re.search(pattern, string_one)
b = re.search(pattern, string_two)
c = re.search(pattern, string_three)

print(a.group() if a is not None else 'Not found')
print(b.group() if b is not None else 'Not found')
print(c.group() if c is not None else 'Not found')

Résultats

file_record_transcript.pdf
file_07241999.pdf
Not found

Mais devrait revenir

file_record_transcript
file_07241999
Not found

Merci!

11
L. Robinson

Vous avez besoin du premier groupe capturé:

a.group(1)
b.group(1)
...

sans aucune spécification de groupe capturée comme argument pour group() , il affichera la correspondance complète, comme ce que vous obtenez maintenant.

Voici un exemple:

In [8]: string_one = 'file_record_transcript.pdf'

In [9]: re.search(r'^(file.*)\.pdf$', string_one).group()
Out[9]: 'file_record_transcript.pdf'

In [10]: re.search(r'^(file.*)\.pdf$', string_one).group(1)
Out[10]: 'file_record_transcript'
17
heemayl