J'ai besoin pour analyser un fichier de configuration qui ressemble à ceci (simplifié):Puis-je utiliser re.sub (ou regexobject.sub) pour remplacer du texte dans un sous-groupe?
<config>
<links>
<link name="Link1" id="1">
<encapsulation>
<mode>ipsec</mode>
</encapsulation>
</link>
<link name="Link2" id="2">
<encapsulation>
<mode>udp</mode>
</encapsulation>
</link>
</links>
Mon objectif est d'être en mesure de modifier les paramètres spécifiques à un lien particulier, mais je vais avoir du mal à obtenir une substitution pour fonctionner correctement . J'ai un regex qui peut isoler une valeur de paramètre sur un lien spécifique, où la valeur est contenue dans le groupe de capture 1:
link_id = r'id="1"'
parameter = 'mode'
link_regex = '<link [\w\W]+ %s>[\w\W]*[\w\W]*<%s>([\w\W]*)</%s>[\w\W]*</link>' \
% (link_id, parameter, parameter)
Ainsi,
print re.search(final_regex, f_read).group(1)
impressions ipsec
Les exemples dans le regex howto tous semblent supposer que l'on veut utiliser le groupe de capture dans le remplacement, mais ce que je dois faire est de remplacer le groupe de capture lui-même (par exemple changer le mode Link1 d'ipsec en udp).
Modification du regex tel qu'il existe maintenant deux groupes de capture bracketing le texte que je dois changer, puis y compris ces deux groupes la chaîne de remplacement a travaillé. –
Je suis curieux de savoir pourquoi n'utilisez-vous pas la librairie xml au lieu de reges? –
Un couple de facteurs, y compris la connaissance limitée de XML de ma part et la suggestion par d'autres développeurs que je respecte qu'une regex pourrait être le moyen le plus rapide pour moi de résoudre le problème. Cela dit, je pourrais aller avec l'option BeautifulSoup, car il semble être relativement simple à mettre en œuvre. –