2011-04-03 68 views
8

Estoy tratando de escribir una expresión regular para el valor adicional que sigue a la palabra 'Total', pero no estoy seguro de cómo manejar el retorno de carro, lo que significa que estoy buscando más de 2 líneas separadas . ¿Alguien sabe la mejor manera de abordar esto?Expresión regular con retorno de carro

Taxes&Charges↵ 
↵ 
£ 35.97↵ 
↵ 
Total↵ 
£ 198.98↵ 
↵ 
£ 35.97↵ 
↵ 
↵ 
Total↵ 
£ 333.98 
+2

¿Qué sabor de la expresión regular estás usando? – kennytm

+0

Esto depende totalmente de cómo está recibiendo su texto en la aplicación, una línea a la vez o todo el archivo en un valor de cadena, por ejemplo. Además, depende del idioma que esté utilizando, mientras que la mayoría de las implementaciones de expresiones regulares tienen más o menos las mismas opciones para tratar varias líneas, las formas de invocarlas son diferentes. – LHMathies

+0

¿Qué quiere decir con "aumentar el valor"? – intuited

Respuesta

0

Añadir s modificador a su expresión regular. s significa tratar cadena como una sola línea. ¿Por qué no elimina primero el retorno de carro con str_replace? Vaya, no hay etiqueta de PHP.

6

En expresiones regulares se debe utilizar el \r para coger el retorno de carro y \r\n para coger la línea se rompe

0

Si añade s, para significar la línea única, puede entonces (por ejemplo, si las ventanas) utiliza

^Total\r\n£([ 0-9.]+)\r\n" para extraer los valores totales.

(no probado, los soportes deben asegurarse de que aparece como un valor de grupo)

3

que puedes usar expresiones regulares de puntos opción partidos de nueva línea (si es compatible).

E.g. en .NET puede usar RegexOptions.Singleline para esto. Especifica el modo de línea única. Cambia el significado del punto (.) para que coincida con cada carácter (en lugar de cada carácter excepto \n).

El siguiente expresión:

Regex ex = new Regex(@"(?<=Total\r\n)£\s?[\d.]+", RegexOptions.Singleline); 

coincidirá con £ 198.98 y £ 333.98 valores de su ejemplo de ensayo.

Cuestiones relacionadas