如何在某个单词之前提取数字?

时间:2016-12-28 06:46:11

标签: python regex

有句“我有5公斤苹果和6公斤梨”。

我只想提取苹果的重量。

所以我用

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

但是,它只适用于整数。那么,如果要提取的数字是5.5,我该怎么办?

7 个答案:

答案 0 :(得分:1)

你需要的正则表达式应该是这样的:

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

您可以执行以下操作:

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

Here是一个在线示例

答案 1 :(得分:0)

?指定正则表达式的可选段。

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

答案 2 :(得分:0)

您可以使用number = re.findall(r'(\d+\.?\d*) kg apples', sentence)

答案 3 :(得分:0)

您更改正则表达式以匹配它:

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

\.\d+匹配一个点,后跟至少一位数。我把它作为可选项,因为你仍然想要一个数字。

答案 4 :(得分: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']

答案 5 :(得分:0)

re.findall(r'[-+]?[0-9]*\.?[0-9]+.', sentence)

答案 6 :(得分:0)

非正则表达式解决方案

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"