Regex: recherchez ces balises HTML particulières qui contiennent ces mots (chaînes)

Aug 19 2020

J'ai ces balises:

<span class="text_obisnuit2">* Not&#259;:</span>John Wells - <em>My Dreams</em>, Albatros Books, 1986.</p>

et celui-là:

<span class="text_obisnuit1">* Not&#259;:</span>Mariah Carey - <em>Lovers on the road</em>, BackStreet Books, 1965.</p>

Donc, je veux trouver ces balises html particulières <span class="text_obisnuit2">qui contiennent ces mots (chaînes): Albatroset <em>et </em>(La première ligne)

Réponses

4 Glorfindel Aug 19 2020 at 16:49

Ceci est simple, mais il faut que les 'Albatros' viennent après le <em>tag ( démo ):

(<span class="text_obisnuit2">).*<em>.*<\/em>.*Albatros.*

Le suivant ne se soucie pas de l'ordre dans lequel ils sont ( démo ):

(<span class="text_obisnuit2">).*(<em>.*<\/em>.*Albatros.*|Albatros.*<em>.*<\/em>.*)

Voici une autre variante, où le (s) chiffre (s) après text_obisnuitn'a pas d'importance et la spanbalise entière est capturée comme premier groupe ( démo ):

(<span class="text_obisnuit\d+">.*<\/span>).*(<em>.*<\/em>.*Albatros.*|Albatros.*<em>.*<\/em>.*)

Toutes les expressions régulières supposent que les entrées sont chacune sur leur propre ligne dans le fichier. Il est peut-être plus logique de détecter pour <p>et </p>comme limites, mais pour cela, nous aurions besoin d'un extrait plus grand de votre fichier d'entrée.

4 Toto Aug 19 2020 at 17:01
  • Ctrl+F
  • Trouver quoi: <span class="text_obisnuit2">(?=.*?<em>.*?</em>)(?=.*?\bAlbatros\b).*$
  • VÉRIFIER Envelopper
  • CHECK Expression régulière
  • UNCHECK . matches newline
  • Find All in Current Document

Explication:

<span class="text_obisnuit2">   # literally
(?=                             # positive lookahead, make sure we have after:
.*?                           # 0 or more any character but newline, not greedy
<em>                          # literally open em tag
.*?                           # 0 or more any character but newline, not greedy
</em>                         # literally close em tag
)                               # end lookahead
(?=                             # positive lookahead, make sure we have after:
.*?                           # 0 or more any character but newline, not greedy
\bAlbatros\b                  # Albatros with word boundaries
)                               # end lookahead
.*                              # 0 or more any character but newline
$                               # end of line

Capture d'écran: