Bonjour,
J'ai une variable qui contient une chaine de la forme :
ou bien 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
...
Je veux récupérer la valeur suivant le nom /Count (dans les exemples 35).(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
...
J'ai écrit la reg exp suivante :
puis le code suivant :
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)
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.
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())
Merci à ceux qui se pencheront sur le sujet.
Mathieu
Partager