2012-08-16 79 views
0

我想从一个字符串中获得一些数学,没有小数,它所有的工作都很完美,但是当我开始在它中添加它们停止工作时,它似乎没有在那里留下点。我认为我的正则表达式是正确的,但有人能纠正我?使用正则表达式和数学

result = re.findall('\d+\.?\d*\*\d+\.?\d*', e) 
for x in result: 
    lst = x.split("*") 
    print lst 
    e = e.replace(x, str(float(lst[0])*float(lst[1]))) 

所以,如果我把"1.0*1.0"应该拿出1.0,但它出来与100.0,这是因为正则表达式。打印lst带出[10“,”10“]而不是[”1.0“,”1.0“],所以我们可以说它不是那条线之后。有任何想法吗?

我的理解是,+意味着一个或多个?指0或1,*表示0以上

+1

它适用于我......(所有说的和完成,'e'等于'“1.0”') – mgilson 2012-08-16 00:50:59

+1

也适用于我。 。 。我猜[GIGO](http://en.wikipedia.org/wiki/Garbage_in,_garbage_out);当你说''1.0 * 1.0''时,那是什么e被设置为以前? – ernie 2012-08-16 00:51:43

+4

这里不是你的问题,但你最好习惯使用正则表达式的原始字符串('r'\ d + \。?.....“),所以你没有得到如果你尝试添加一个'\ b'或其他东西,会感到困惑。 – Dougal 2012-08-16 00:55:06

回答

0

输入字符串只进来为10 * 10,所以我明明做错了什么事,在另一个模块I在这里度过了这段代码之前,我在加入小数这是做...

acceptedChars = set(string.digits + "[]()+-/*^=!<>" + string.letters) 
newL = ''.join([ x for x in e if x in acceptedChars]) 
e = newL 

这意味着.将被删除,所以我需要添加此回所以现在我使用此代码:

acceptedChars = set(string.digits + "[]()+-/*^=!<>." + string.letters) 
newL = ''.join([ x for x in e if x in acceptedChars]) 
e = newL 

如果其他人能想到任何应该在那里的数学符号,它将在未来有所帮助。谢谢。

+1

'''.join([..])''中不需要'[..]':'''.join(x对于x中的x,如果在acceptedChars中是x)''同样也可能更高效。 :) – huon 2012-08-16 21:28:24

+0

Okie tokies。谢谢。 – FabianCook 2012-08-16 21:29:01

相关问题