2014-01-16 30 views
0
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 +'正则表达式搜索从字符串中提取浮点数。 Python

如何使用re.search来提取此浮点数? 为什么这些小组不以这种方式工作?我知道我可以调整一下,让它与这些团队合作。任何帮助将不胜感激

我想我可以用组,paranthesis,但我得到的eror

+0

你怎么能有-0.03美元,在你的手? :) –

回答

2

-\w[.]+不匹配-0.03因为[.]比赛.字面上因为.[...]内。

\wdollars也阻止模式匹配sequencedollars之后没有字符。

使用(-?\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) 

顺便说一句,捕获组编号从1启动。 (group(0)返回整个匹配的字符串)

+0

是什么?做 –

+1

@ draconisthe0ry,' - ?'make'-'可选,因为'?'匹配0或1次出现'RE'。 – falsetru

2

你的正则表达式不匹配有以下几个原因:

  • 它总是需要一个-(OK在这种情况下,一般有问题的)
  • 它需要恰好有一个数字在.之前(它甚至允许像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) 

会更有意义。