Expression régulière multi-lignes

Top Page

Reply to this message
Author: Frédéric Mantegazza
Date:  
To: guilde
Subject: Expression régulière multi-lignes
Bonjour,

Je cherche à décoder le message suivant :

xpl-cmnd
{
hop=1
source=xpl-xplhal.myhouse
target=acme-cm12.server
}
x10.basic
{
command=dim
device=a1
level=75
}

Dans le premier bloc {], il ne peut y avoir que les 3 lignes présentées.
Par contre, dans le second bloc, il peut y avoir un nombre quelconque de
lignes.

Voici l'expression que j'utilise, mais qui ne fonctionne que dans le cas
où j'ai 3 lignes dans le second bloc :

^(?P<type>xpl-cmnd|xpl-trig|xpl-stat)$
^\{$
^hop=(?P<hop>[1-9])$
^source=(?P<source_vendor_id>.{1,8}?)-(?P<source_device_id>.{1,8}?)\.(?P<source_instance_id>.{1,16}?)$
^target=(?P<target_vendor_id>.{1,8}?)-(?P<target_device_id>.{1,8}?)\.(?P<target_instance_id>.{1,16}?)$
^\}$
^(?P<schema_class>.{1,8}?)\.(?P<schema_type>.{1,8}?)$
^\{$
$(.*)=(.*)^
$(.*)=(.*)^
$(.*)=(.*)^
^\}$

(j'utilise le mode multi-ligne des expressions régulières).

Comment faire pour que ça marche pour un nombre quelconque de lignes ?
Est-il possible de les matcher dans des groupes ? À la limite, si
j'arrive à récupérer le bloc entier, ce n'est pas dur de faire un split
sur le = en python (mais bon, tout en expression régulière, ce serait
plus joli).

Merci d'avance.

-- 
    Frédéric