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