Estoy tratando de encontrar líneas en archivos donde ocurre un número específico Y una cadena específica, con un conjunto arbitrario de caracteres entre ellos (en otras palabras, cada uno ocurre en cualquier lugar de la línea, no uno al lado del otro *).

* Editar: Para aclarar, simplemente estoy diciendo que los dos valores de cadena no estarán uno al lado del otro. No estoy diciendo que esto sea un requisito de la expresión regular. Estará bien si encuentra 123985Positive_Adjustment. Simplemente no lo hará porque no hay líneas como esa. Disculpas si mi pregunta fue engañosa.

He probado muchas expresiones regulares después de buscar en Google este problema, pero ninguna ha hecho exactamente lo que necesito. Un ejemplo que he probado es ...

123985.*Positive_Adjustment

(Busque ese número, luego un número arbitrario de caracteres, luego esa cadena)

¿Alguien puede sugerir una expresión regular correcta para usar que logre esto en Notepad ++ (actualizado al momento de escribir)?

Un ejemplo de una coincidencia válida sería ...

15/02/12|abc|123985|G1|6|12:04:29|19088829.96|Positive_Adjustment||||299243.70|||0.00|299243.70|15/02/12|||10.9.210.0||5001|0.0000|||||||||||||||||||||||||
-1
MrVimes 17 feb. 2015 a las 18:22

2 respuestas

La mejor respuesta

en otras palabras, cada uno ocurre en cualquier lugar de la línea, no uno al lado del otro.

^.*123985.+Positive_Adjustment.*$

Esta simple expresión regular debería hacerlo por ti.

2
vks 17 feb. 2015 a las 15:56

Puede describir partes que no sean el número o la palabra que busca. El resultado es un poco largo pero eficiente (porque falla rápidamente):

^(?:[^1\n]+|1(?!23985))*+123985(?:[^P\n]+|P(?!ositive_Adjustment))++Positive_Adjustment.*

O más largo y más rápido:

^[^1\n]*+(?:1(?!23985)[^1\n]*)*+123985(?>[^P\n]+|P(?!ositive_Adjustment)[^P\n]*)(?:P(?!ositive_Adjustment)[^P\n]*)*+Positive_Adjustment.*
1
Casimir et Hippolyte 17 feb. 2015 a las 15:42