2016-12-28 2 views
2

Есть предложение «У меня 5 кг яблок и 6 кг груши».Как извлечь номер перед определенными словами?

Я просто хочу извлечь вес яблок.

Поэтому я использую

sentence = "I have 5 kg apples and 6 kg pears" 
number = re.findall(r'(\d+) kg apples', sentence) 
print (number) 

Однако, он просто работает для целых чисел. Итак, что мне делать, если число, которое я хочу извлечь, равно 5.5?

ответ

0

? обозначает необязательный сегмент регулярного выражения.

re.findall(r'((\d+\.)?\d+)', sentence)

+0

'= номер re.findall (r '((\ d + \.)? \ d +)', предложение) 'возвращает список кортежей' [('5', ''), ('6', '')] ' – Dudnikof

0

Вы можете использовать number = re.findall(r'(\d+\.?\d*) kg apples', sentence)

0

Вы изменить регулярное выражение, чтобы соответствовать его:

(\d+(?:\.\d+)?) 

\.\d+ совпадает с точкой, за которой следует, по крайней мере, одна цифра. Я сделал это необязательным, потому что вам по-прежнему нужна одна цифра.

0

Вы можете попробовать что-то вроде этого:

import re 

sentence = ["I have 5.5 kg apples and 6 kg pears", 
        "I have 5 kg apples and 6 kg pears"] 
for sen in sentence: 
    print re.findall(r'(\d+(?:\.\d+)?) kg apples', sen) 

Выход:

['5.5'] 
['5'] 
+0

Это соответствует' 5.6. 5'. – Maroun

+0

@MarounMaroun \t Спасибо :) – MYGz

0

решение Non-регулярное выражение

sentence = "I have 5.5 kg apples and 6 kg pears" 
words = sentence.split(" ") 

[words[idx-1] for idx, word in enumerate(words) if word == "kg"] 
# => ['5.5', '6'] 

Вы можете проверить, являются ли они действительными поплавки используя

try: 
    float(element) 
except ValueError: 
    print "Not a float" 
1

Регулярное выражение вам нужно будет выглядеть следующим образом:

(\d+.?\d*) kg apples 

можно сделать следующим образом:

number = re.findall(r'(\d+.?\d*) kg apples', sentence) 

Here является онлайн пример

Смежные вопросы