Necesito un selector para raspar el valor después del símbolo del euro (\ u20ac).

<Selector xpath='//*[@class="col-sm-4"]/text()' data=u'\r\n\t\t            \u20ac 30.000,00'>

Probé docenas de variaciones que encontré aquí en stackoverflow y de lo contrario, pero no puedo conseguirlo.

Lados como https://regexr.com/ me muestran algo como esto:

response.xpath('//*[@class="col-sm-4"]/text()').re('(\u20ac).\d*.\d*.\d*')

Debería funcionar, pero no lo hace.

EDITAR: Aquí un enlace de ejemplo de datos que me gustaría raspar: https: //www.firmenabc .at / manfred-jungwirth-montagen_MoKY

Agradecería ayuda!

Miguel

1
Michael 11 nov. 2017 a las 22:05

2 respuestas

La mejor respuesta

Prueba esto:

response.xpath('//*[@class="col-sm-4"]/text()').re(u'\u20ac\s*(\d+[\d\.,]+)')
0
Wilfredo 13 nov. 2017 a las 15:52

Aquí está la expresión regular que está buscando. Si desea hacer coincidir \u20ac literalmente, debe anteponerlo con un \, la siguiente variante: \u20ac|\\u20ac coincidirá con € y \ u20ac:

(\u20ac|\\u20ac)\s+.\d*.\d*.\d*

También faltaba un \s+. \s especifica que desea hacer coincidir un espacio en blanco, \s+ especifica que desea hacer coincidir varios espacios en blanco (observe que hay un espacio en blanco entre \ u20ac y el valor, 30.000,00)

Sin embargo, tenga en cuenta que esto capturará solo el símbolo (los grupos de captura se componen de paréntesis cerrados (), es decir, ( CUALQUIER COSA ENTRE ESTO SERÁ CAPTURADO )

Entonces creo que lo que quieres es:

\u20ac|\\u20ac\s+(\d*.*): aquí, rodeamos .\d*.* con (), por lo que capturamos ese valor en lugar del símbolo .

Repetir .\d* es redundante, ya indicó que desea hacer coincidir cada ocasión escribiéndolo previamente: \d y añadiéndole un sufijo *.

Por último, te recomiendo que juegues con expresiones regulares usando https://www.regex101.com - Es una gran herramienta y te ahorrará muchos dolores de cabeza.

0
alexisdevarennes 11 nov. 2017 a las 19:27