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:
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/USD
y 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