Estoy escribiendo un analizador simple de expresiones regulares para la salida de la utilidad sensors
en Ubuntu. Aquí está un ejemplo de una línea de texto que estoy de análisis:¿Cómo analizar de forma portátil el símbolo de grado (Unicode) con expresiones regulares?
temp1: +31.0°C (crit = +107.0°C)
Y aquí está la expresión regular que estoy usando para que coincida (en Python):
temp_re = re.compile(r'(temp1:)\s+(\+|-)(\d+\.\d+)\W\WC\s+'
r'\(crit\s+=\s+(\+|-)(\d+\.\d+)\W\WC\).*')
Este código funciona como se espera y partidos el texto de ejemplo que he dado arriba. Los únicos bits de las que estoy muy interesado en son los números, por lo que este bit:
(\+|-)(\d+\.\d+)\W\WC
que comienza haciendo coincidir el signo +
o -
y termina haciendo coincidir el °C
.
Mi pregunta es, ¿por qué se necesitan dos caracteres \W
(no alfanuméricos) para que coincida con °
en lugar de uno? ¿Se romperá el código en los sistemas donde Unicode se representa de manera diferente a la mía? Si es así, ¿cómo puedo hacer que sea portátil?
prueba la bandera 're.UNICODE' – netvope
Con la bandera' re.UNICODE' que RE no concuerda con '\ W \ WC' o' \ WC'. O, ¿te he entendido mal? – snim2
También hay "' ℃ '", que es un carácter simple que significa grados celsius. Muchas gracias, Consorcio Unicode! –