Bonjour,

J'ai une variable qui contient une chaine de la forme :
(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 :
(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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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