Regex: encuentre esas etiquetas html particulares que contienen estas palabras (cadenas)

Aug 19 2020

Tengo estas etiquetas:

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

y éste:

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

Entonces, quiero encontrar esas etiquetas html particulares <span class="text_obisnuit2">que contienen estas palabras (cadenas): Albatrosy <em>y </em>(La primera línea)

Respuestas

4 Glorfindel Aug 19 2020 at 16:49

Este es sencillo, pero requiere que el 'Albatros' venga después de la <em>etiqueta ( demostración ):

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

Al siguiente no le importa en qué orden están ( demo ):

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

Aquí hay otra variación, donde los dígitos posteriores text_obisnuitno importan y la spanetiqueta completa se captura como el primer grupo ( demostración ):

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

Todas las expresiones regulares asumen que las entradas están cada una en su propia línea en el archivo. Quizás tenga más sentido detectar por <p>y </p>como los límites, pero para eso necesitaríamos tener un extracto más grande de su archivo de entrada.

4 Toto Aug 19 2020 at 17:01
  • Ctrl+F
  • Encontrar que: <span class="text_obisnuit2">(?=.*?<em>.*?</em>)(?=.*?\bAlbatros\b).*$
  • COMPROBAR Envolver
  • COMPROBAR Expresión regular
  • DESCARGAR . matches newline
  • Find All in Current Document

Explicación:

<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

Captura de pantalla: