Je voudrais générer une regex avec la condition suivante:
La chaîne "EVENT" est contenue dans une balise xml appelée "SHEM-HAKOVETZ".
Par exemple, la chaîne suivante doit être un match:
<SHEM-HAKOVETZ>104000514813450EVENTS0001dfd0.DAT</SHEM-HAKOVETZ>
4 Réponses :
Je pense que vous voulez quelque chose comme ça ^
Expression régulière
^
Parties de l'expression régulière
^ Depuis le début de la ligne
Balise de départ
. * Tout caractère - zéro ou plus
EVENT Partie centrale
<\ / SHEM-HAKOVETZ> $ Fin d'une partie du match
Voici le regex fonctionnel.
Si vous voulez faire correspondre cette ligne, vous pouvez utiliser cette regex:
<SHEM-HAKOVETZ>*EVENTS.*(?=<\/SHEM-HAKOVETZ>)
Cependant, je ne recommanderais pas d'utiliser des données basées sur XML regex, car il peut y avoir des problèmes avec la gestion des espaces dans XML (voir cet article pour plus d'informations). Je suggérerais d'utiliser un analyseur XML réel (puis d'appliquer le reg pour être sûr de vos résultats.
Voici une solution pour ne faire correspondre que la partie "valeur" en ignorant les balises XML:
(?<=<SHEM-HAKOVETZ>)(?:.*EVENTS.*)(?=<\/SHEM-HAKOVETZ>)
Vous pouvez la vérifier en action à: https://regex101.com/r/4XiRch/1 Il fonctionne avec Lookbehind et Lookahead pour s'assurer qu'il ne correspondra que si les balises sont correctes, mais pour un codage ultérieur, il ne correspondra qu'au contenu.
(? <=). * (? = )