Recherche de chaîne avec une expression régulière complexe
Bonjour,
J'ai une variable qui contient une chaine de la forme :
Citation:
(0 à n caractères quelconques)
<<
(0 à n caractères d'espacement espace, \t, \n ...)
/Count (un nombre de n digits)
(0 à n caractères d'espacement espace, \t, \n ...)
/Type
(0 à n caractères d'espacement espace, \t, \n ...)
/Pages
(0 à n caractères quelconques)
par exemple
...
endobj
781 0 obj
<</Count 35/Type/Pages/Kids[782 0 R 783 0 R 784 0 R 785 0 R 786 0 R 787 0 R]>>
endobj
782 0 obj
...
ou bien de la forme :
Citation:
(0 à n caractères quelconques)
<<
(0 à n caractères d'espacement espace, \t, \n ...)
/Type
(0 à n caractères d'espacement espace, \t, \n ...)
/Pages
(0 à n caractères quelconques)
/Count (un nombre de n digits)
>>
(0 à n caractères quelconques)
par exemple
...
endobj
3 0 obj
<< /Type /Pages /Kids [
6 0 R
...
642 0 R
] /Count 35
>>
endobj
1 0 obj
...
Je veux récupérer la valeur suivant le nom /Count (dans les exemples 35).
J'ai écrit la reg exp suivante :
Code:
1 2
|
reg_exp = re.compile(r"<<\s*/Count.*?/Type\s*/Pages|<<\s*/Type\s*/Pages.*?/Count.*?>>", re.MULTILINE|re.DOTALL) |
puis le code suivant :
Code:
1 2 3 4 5 6 7 8
|
lst = reg_exp.findall(data)
nb_pg = lst[0][lst[0].find("/Count") + 6 :]
if "/" in nb_pg :
nb_pg = nb_pg[: nb_pg.find("/")]
if "\n" in nb_pg :
nb_pg = nb_pg[: nb_pg.find("\n")]
nb_pg = int(nb_pg.strip()) |
Cela fonctionne mais je me demande s'il n'est pas possible de condenser tout ça en une expression régulière plus complexe qui retournerait directement la valeur voulue.
Merci à ceux qui se pencheront sur le sujet.
Mathieu