正则表达式搜索从字符串中提取浮点数。蟒蛇

时间:2014-01-16 08:00:31

标签: python regex search find

import re

sequence = 'i have -0.03 dollars in my hand'

m = re.search('(have )(-\w[.]+)( dollars\w+)',sequence)

print m.group(0)
print m.group(1)
print m.group(2)

寻找在两次出现之间提取文本的方法。在这种情况下,格式为'我有'后跟 - 浮点数,然后是'美元\ w +'

如何使用re.search提取此浮点数? 为什么这些小组不这样做?我知道我可以通过调整来与这些团队合作。任何帮助将不胜感激

我以为我可以使用带有paranthesis的组但我得到了一个错误

3 个答案:

答案 0 :(得分:2)

-\w[.]+-0.03不匹配,因为[.]字面匹配.,因为.位于[...]内。

\w之后的

dollars也会阻止该模式与sequence匹配。 dollars之后没有单词字符。

使用(-?\d+\.\d+)作为模式:

import re

sequence = 'i have -0.03 dollars in my hand'

m = re.search(r'(have )(-?\d+\.\d+)( dollars)', sequence)

print m.group(1) # captured group start from `1`.
print m.group(2) 
print m.group(3)

BTW,捕获的组号从1开始。 (group(0)返回整个匹配的字符串)

答案 1 :(得分:2)

你的正则表达式不符合以下几个原因:

  • 它始终需要-(在这种情况下可以,一般都有问题)
  • 它只需要.之前的一位数字(它甚至允许使用A之类的非数字。)
  • 它允许任意数量的点,但点后不再有数字。
  • dollars后立即需要一个或多个字母数字。

所以它匹配"I have -X.... dollarsFOO in my hand"但不匹配"I have 0.10 dollars in my hand"

此外,将固定文本放入捕获括号中是没有用的。

m = re.search(r'\bhave (-?\d+\.\d+) dollars\b', sequence)

会更有意义。

答案 2 :(得分:0)

之前已经在许多配方中提出过这个问题。你正在寻找一个能找到数字的正则表达式。由于数字格式可能包括小数,逗号,指数,加号/减号和前导零,因此您需要一个强大的正则表达式。幸运的是,这个正则表达式已经为你编写。

请参阅How to extract a floating number from a stringRegular expression to match numbers with or without commas and decimals in text