Sto scrivendo un semplice parser di espressioni regolari per l'output dell'utilità sensors
su Ubuntu. Ecco un esempio di una riga di testo che sto analisi:Come analizzare passivamente il simbolo di grado (Unicode) con le espressioni regolari?
temp1: +31.0°C (crit = +107.0°C)
Ed ecco l'espressione regolare che sto usando per corrispondere a quello (in Python):
temp_re = re.compile(r'(temp1:)\s+(\+|-)(\d+\.\d+)\W\WC\s+'
r'\(crit\s+=\s+(\+|-)(\d+\.\d+)\W\WC\).*')
Questo codice funziona come previsto e le partite il testo di esempio che ho fornito sopra. Gli unici bit sono davvero interessati a sono i numeri, quindi questo bit:
(\+|-)(\d+\.\d+)\W\WC
che inizia facendo corrispondere il segno +
o -
e termina facendo corrispondere il °C
.
La mia domanda è: perché sono necessari due caratteri (non alfanumerico) per corrispondere a °
anziché uno? Il codice si interromperà su sistemi in cui Unicode è rappresentato in modo diverso dal mio? Se sì, come posso renderlo portatile?
provare il flag 're.UNICODE' – netvope
Con il flag' re.UNICODE' che RE non corrisponde con '\ W \ WC' o' \ WC'. O ti ho frainteso? – snim2
C'è anche "' ℃ '", che è un carattere _single_ che significa gradi centigradi. Grazie mille, Unicode Consortium! –