2017-02-21 17 views
2

Я использую (char.*?char2) для извлечения субчастиц, который начинается с char1 и заканчивается char2 из строки.Извлечение температурных градусов (celcius или fahrenheit) из строки

Теперь я хочу извлечь информацию о температуре, например. (40 ° C, -30 ° C, 80 ° F) из струны. В этом случае выражение в выражении регулярного выражения должно определять начальный символ с любыми символами цифр, используя вероятность + и -, а окончание - °C или °F, и между ними не должно быть буквы, и также должно быть whitespace символ между числом и завершением в возможность.

Как определить такое регулярное выражение?

Я проверил это, Regex to extract temperatures and temperature ranges from a string, но ответ имеет немного другую цель.

ответ

5

(\d+) ?°([CF])

Первая группа должна иметь температуру, второй C или F.

Расширение его, чтобы позволить немного больше вариации:

([+-]?\d+(\.\d+)*)\s?°([CcFf]) 

Это будет соответствовать any of these входы, позволяя использовать более одного места, или вкладку, нижний регистр, десятичные точки и знаки.

Пример программы питона:

import re 
string = ''' 
20°C 
2 °F 
It was cold, 2 °F in fact. 
30 °C 
-40 °C 
+2.3^I°c 
+2.3°c 
10°C 
''' 
pattern = r'([+-]?\d+(\.\d+)*)\s?°([CcFf])' 
print(re.findall(pattern, string)) 
# Output: 
# [('20', '', 'C'), ('2', '', 'F'), ('2', '', 'F'), ('30', '', 'C'), 
# ('-40', '', 'C'), ('+2.3', '.3', 'c'), ('+2.3', '.3', 'c'), 
# ('10', '', 'C')] 
+0

Andre, спасибо за ваш ответ. Но это не работает для «30 ° C». – yusuf

+1

Это работает для меня. Я пытался в http://regexr.com/ Вы уверены, что это капитал C? Или, может быть, есть вкладка вместо пространства. Или, может быть, я использую другой символ '°', чем вы? –

+0

Да, Андре, это столица C. И вы используете тот же символ с моим. Я использую python re.findall – yusuf