regex: sélectionnez toutes les lignes qui ne se terminent pas par une balise spécifique

0

J'ai ces 4 lignes, toutes commençant par tag <p class="TEST">et se terminant par tag <br>sauf les deux dernières.

<p class="TEST">My mother is at home.<br>
<p class="TEST">My father is at home.<br>
<p class="TEXT">My sister is at home.<LLbr>
<p class="TEXT">My brother is at home.<AAbr>

Donc, je veux trouver toutes les lignes avec la balise TEXT qui ne se termine pas par <br>

Mon résultat devrait être

<p class="TEXT">My sister is at home.<LLbr>
<p class="TEXT">My brother is at home.<AAbr>

J'ai fait une regex, mais ce n'est pas trop bon. (?-s)(.*<p class="TEXT">.*)(?-s)(?!)<br>(.*)$

Juste moi
la source
Une option, qui pourrait vous donner ce que vous voulez. Si vous appuyez sur Ctrl-F pour afficher la boîte de dialogue de recherche, cliquez sur l'onglet Marquer. Cochez l'option Ligne de signet et recherchez <br> ou tout autre élément nécessaire pour marquer la ligne. Ensuite, allez à Rechercher - Signet et sélectionnez le signet inverse. Je trouve ce flux de travail utile dans de nombreux scénarios. J'espère que ça aide.
HelpingHand
J'ai plus de 5000 fichiers .html à vérifier :) Je n'ai pas le temps de les vérifier individuellement :)
Just Me

Réponses:

3
  • Ctrl+H
  • Trouver quoi: <p class="TEXT">(?:(?!<br>)(?!<p).)*(?:<.+?>|\z)
  • Décocher la case du match
  • cocher Envelopper
  • vérifier l'expression régulière
  • Décocher . matches newline
  • Search in document

Explication:

<p class="TEXT">    # literally
(?:                 # start non capture group
  (?!<br>)          # negative lookahead, make sure we haven't <br>
  (?!<p)            # negative lookahead, make sure we haven't <p
  .                 # any character but newline
)*                  # group may appear 0 or more times
(?:                 # non capture group
   <.+?>            # a tag
 |                  # OR
   \z               # end of string
)                   # end of group

entrez la description de l'image ici

DEMO

Toto
la source
bonjour Toto, merci beaucoup. Mais, un autre scénario. <br>Supposons que la balise se trouve sur la ligne suivante, et je ne veux pas trouver aussi cela parce que a <br>. Voir ce lien regex101.com/r/vSfrsv/2
Just Me
merci, Toto. Veuillez mettre à jour votre réponse avec cette solution alternative rationnelle ici, au cas où quelqu'un en aurait besoin. Et aussi, s'il vous plaît expliquer ce que signifie cette partie de regex: (?! <P).) * (?: <. +?> | \ Z)
Just Me
@ JustMe: édition effectuée.
Toto
s'il vous plaît voir ce cas réel. regex101.com/r/y8GB6e/1 Je change un peu votre regex, avec mes vraies balises. Mais ne fonctionne pas. S'il vous plaît, aidez-moi et changez la bonne version en cliquant sur le lien ci-dessous. Au lieu de <br> j'ai </ p>
Just Me