Code python buggé, histoire sombre de régex, listes et consoles...

Résolu/Fermé
Lecodeurhtmlcss Messages postés 76 Date d'inscription lundi 20 avril 2020 Statut Membre Dernière intervention 24 août 2022 - Modifié le 22 févr. 2021 à 20:41
Whismeril Messages postés 19145 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 29 septembre 2024 - 22 févr. 2021 à 21:17
(Re)bonsoir à tous, et merci de votre aide,

Après modification de mon code de la dernière fois, et changement de méthode car ce changement n'amenait pas de réponses, je reviens avec de nouveaux problèmes python étranges et inquiétants.

Cette fois, ça m'a l'air plus compliqué. Pour faire simple, je mets mon code juste après.

from pyexcel_ods3 import get_data
import re

dat = get_data("occurences biogrammes.ods")
data = str(dat)
prem = input("Quelle est la première lettre ?")

print(data)

occurencesmatch = re.search(("['"+prem),data)
print(occurencesmatch)
occurrences = occurencesmatch[24:-13]

print("les occurences sont " + occurences)
    


En gros, j'essaie de noter les positions de la lettre demandée au milieu de mon string
data
, là où elle commence les crochets.

str(data)
ressemble à ça :
OrderedDict([('Sheet1', [['_', 'd', 0], ['g', 'p', 0], ['b', 'v', 0], ['-', ',', 0], ['a', ')', 0.01],


Tout est normalement censé marcher (comme toujours...), or ça ne fonctionne pas, et la console s'excite un peu :

Traceback (most recent call last):
File "C:\Users\Utilisateur\...\programme py générateur", line 13, in <module>
occurencesmatch = re.search(("['"+prem),data)
File "C:\Users\Utilisateur\AppData\Local\Programs\Thonny\lib\re.py", line 185, in search
return _compile(pattern, flags).search(string)
File "C:\Users\Utilisateur\AppData\Local\Programs\Thonny\lib\re.py", line 288, in _compile
p = sre_compile.compile(pattern, flags)
File "C:\Users\Utilisateur\AppData\Local\Programs\Thonny\lib\sre_compile.py", line 764, in compile
p = sre_parse.parse(p, flags)
File "C:\Users\Utilisateur\AppData\Local\Programs\Thonny\lib\sre_parse.py", line 924, in parse
p = _parse_sub(source, pattern, flags & SRE_FLAG_VERBOSE, 0)
File "C:\Users\Utilisateur\AppData\Local\Programs\Thonny\lib\sre_parse.py", line 420, in _parse_sub
not nested and not items))
File "C:\Users\Utilisateur\AppData\Local\Programs\Thonny\lib\sre_parse.py", line 526, in _parse
source.tell() - here)
re.error: unterminated character set at position 0



-> Donc l'erreur est un caractère non-fini comme début de liste. Mais qu'est-ce qu'un caractère non-fini ?

Plus important encore, qu'est-ce qui ne va pas ?


Promis, si ça fonctionne, je vous enverrait des mots personnalisés de mon cru avec mon générateur ;-D

Merci beaucoup !


A voir également:

1 réponse

Whismeril Messages postés 19145 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 29 septembre 2024 919
22 févr. 2021 à 21:17
Bonsoir

le plus simple quand on a des problèmes avec les regex, c'est d'utiliser un site ou un logiciel dédié à les tester.
Le gros avantage, est que souvent, cela colorise les captures dans le texte source. On voit ainsi ce qu'il se passe au fur et à mesure.

Il faut faire attention de se servir d'un outil qui utilise le même moteur de regex que toi (chaque implémentation est sensiblement différente).

Par exemple, https://regex101.com/ permet de choisir le moteur de regex de Python 2.7

Si je tape
['g
dans la zone de saisie de la regex, ce site me retourne une erreur
[ Character class missing closing bracket
parce qu'en fait les crochets ont une signification en regex, tu en ouvres un sans le refermer. Ce qui n'est pas compréhensible pour le moteur de regex.

Je suppose que tu veux trouver le caractère [ dans ce cas, comme tous les caractères utilisés dans les instructions, il faut le signaler par un échappement
\['g


Pour voir ce que ça capture
https://regex101.com/r/uSZygY/1

1