1
votes

Expression régulière - Commençant et se terminant par, et contient une chaîne spécifique au milieu

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>


1 commentaires

(? <= ). * (? = )


4 Réponses :


0
votes

Je pense que vous voulez quelque chose comme ça ^.*EVENT.*<\/SHEM-HAKOVETZ>$


0 commentaires

0
votes

Expression régulière

^.*EVENTS.*<\/SHEM-HAKOVETZ>$

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.


0 commentaires

0
votes

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.


0 commentaires

0
votes

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.


0 commentaires