¿Cómo encuentro varios valores en la misma línea en cualquier permutación usando Notepad++?

¿Cómo encuentro varios valores en la misma línea en cualquier permutación usando Notepad++?

Estoy usando Notepad++ y estoy tratando de encontrar una manera de buscar múltiples valores en la misma línea. La búsqueda de expresiones regulares no me funciona actualmente, ya que es posible que no sepa en qué orden están los valores.

Por ejemplo, quiero buscar una línea de código que tenga tres valores específicos. El uso .*en la búsqueda de expresiones regulares no funciona ya que debe conocer el orden de los valores. ¿Me es posible buscar estas líneas sin conocer el orden de los valores?

En cada línea tengo quizás un registro comercial que tiene 30 etiquetas diferentes. Quiero buscar 35=D, EUR/USD, 150=8. Sólo quiero buscar entradas con los tres valores presentes.

El problema con el que me encuentro es que el orden de estas etiquetas no está garantizado, por lo que la búsqueda de expresiones regulares que uso a continuación no siempre encuentra todas las entradas que necesito.

35=D.*EUR/USD.*150=8

Respuesta1

Usandomirar hacia el futuroes mucho más eficiente y puede manejar cualquier número de alternancias sin aumentar la complejidad:

  • Ctrl+F
  • "Encontrar que":^(?=.*\b35=D\b)(?=.*\bEUR/USD\b)(?=.*\b150=8\b).+$
  • Controlar"Caso de partido"
  • Controlar"Envolver alrededor"
  • Controlar"Expresión regular"
  • Desmarcar " .coincide con nueva línea"
  • Find All in Current Document

Explicación:

^               # Beginning of line
  (?=           # Start positive lookaead, make sure we have after:
    .*          # 0 or more any character but newline
    \b          # Word boundary to be sure not matching 135=DATA
    35=D        # Literally
    \b          # word boundary
  )             # End lookahead
  (?=           # Start positive lookaead, make sure we have after:
    .*          # 0 or more any character but newline
    \b          # Word boundary
    EUR/USD     # Literally
    \b          # Word boundary
  )             # End lookahead
  (?=           # Start positive lookaead, make sure we have after:
    .*          # 0 or more any character but newline
    \b          # Word boundary
    150=8       # Literally
    \b          # Word boundary
  )             # End lookahead
  .+            # One or more any character but newline
$               # End of line

La captura de pantalla:

Ingrese la descripción de la imagen aquí

Respuesta2

Para hacer coincidir solo aquellas líneas donde existen las tres cadenas, puede usar el |operador alternativo y agrupar (...)sus patrones para crear una expresión regular para todas las permutaciones posibles:

(35=D.*EUR/USD.*150=8)|(35=D.*150=8.*EUR/USD)|(EUR/USD.*150=8.*35=D)|(EUR/USD.*35=D.*150=8)|(150=8.*35=D.*EUR/USD)|(150=8.*EUR/USD.*35=D)

Una versión legible con saltos de línea añadidos:

(35=D.*EUR/USD.*150=8)|
(35=D.*150=8.*EUR/USD)|
(EUR/USD.*150=8.*35=D)|
(EUR/USD.*35=D.*150=8)|
(150=8.*35=D.*EUR/USD)|
(150=8.*EUR/USD.*35=D)

Esto coincidiría con todas las líneas donde esté presente una combinación de 35=D, EUR/USDy 150=8(y posible texto intermedio). En este texto de muestra, solo las últimas tres líneas coincidirían (botón "Buscar todo en el documento actual"):

some text 35=D
some text EUR/USD more text 150=8
some text 35=D more text EUR/USD more text 150=8
some text EUR/USD more text 35=D more text 150=8 more text
some text 150=8 more text EUR/USD 35=D more text


captura de pantalla

información relacionada