Bonjour tout le monde et bon week-end,

J'essaie désespéremment d'écrire une expression régulière pour matcher une formule excel:

D'abord une simple référence à une cellule:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
>>> test = re.compile(r'^(\D{1,4})(\d{1,4})$')
>>> test.search('BA12').groups()
('BA', '12')
Ok ca, ca va, c'est pas bien violent.

Maintenant je voudrais être capable de grouper de la même manière une formule excel simple du genre

BA12+BA13

ou encore AC12*B12+B13-B14

Donc un suite simple de références entrecoupés des opérateurs arithmétiques simple + - * / mais d'une longueur indéfinie

J'ai essayé ceci:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
>>> test = re.compile(r'^(\D{1,4})(\d{1,4})((\+|\-|\*|\/)(\D{1,4})(\d{1,4}))*$')
>>> test.search('BA12').groups()
('BA', '12', None, None, None, None)
>>> test.search('BA12+A22').groups()
('BA', '12', '+A22', '+', 'A', '22')
>>> test.search('BA12+A22-C38').groups()
('BA', '12', '-C38', '-', 'C', '38')
Mais ca ne marche pas vraimenent

Dans le deuxième test, il y'a un groupe "+22" que je ne veux pas. Quant au dernier, il a complétement ignoré le (+,A,22).

Quelqu'un aurait-il une solution à proposer au newbie que je suis?

Merci beaucoup!

R.