Tôi đang viết một trình phân tích biểu thức chính quy đơn giản cho đầu ra của tiện ích sensors
trên Ubuntu. Dưới đây là một ví dụ về một dòng văn bản Tôi đang phân tích cú pháp:Làm cách nào để phân tích cú pháp biểu tượng độ (Unicode) có thể phân tách bằng biểu thức chính quy?
temp1: +31.0°C (crit = +107.0°C)
Và đây là regex Tôi đang sử dụng để phù hợp với (bằng Python):
temp_re = re.compile(r'(temp1:)\s+(\+|-)(\d+\.\d+)\W\WC\s+'
r'\(crit\s+=\s+(\+|-)(\d+\.\d+)\W\WC\).*')
Mã này hoạt động như mong đợi và các trận đấu văn bản ví dụ tôi đã đưa ra ở trên. Các bit duy nhất tôi thực sự quan tâm là những con số, vì vậy bit này:
(\+|-)(\d+\.\d+)\W\WC
mà bắt đầu bằng cách kết hợp các dấu hiệu +
hoặc -
và kết thúc bằng cách kết hợp các °C
.
Câu hỏi của tôi là, tại sao phải mất hai ký tự \W
(không phải chữ số) để khớp với °
thay vì một? Mã có bị phá vỡ trên các hệ thống mà Unicode được biểu diễn khác với tôi không? Nếu vậy, làm thế nào tôi có thể làm cho nó di động?
thử cờ 're.UNICODE' – netvope
Với cờ' re.UNICODE' mà RE không khớp với '\ W \ WC' hoặc' \ WC'. Hoặc, tôi đã hiểu lầm bạn? – snim2
Ngoài ra còn có "' ℃ ", là một ký tự _single_ có nghĩa là độ celsius. Cảm ơn một nhóm, Unicode Consortium! –