2012-08-16 2 views
0

문자열에서 일부 수학을 얻으려고합니다. 십진법이 없어도 완벽하게 작동하지만, 그 중 일부를 추가하기 시작하면 작동을 멈추게되어 점을 남기지 않는 것 같습니다. 내 정규 표현식은 옳다고 생각하지만 누군가 나를 교정 할 수 있습니까? 내가 "1.0*1.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 나올해야하지만이 때문에 정규 표현식이다, 100.0로 나온다.

print lst는 [ "10", "10"]이 아니며 [ "1.0", "1.0"]이 아니므로 그 이후의 행은 아닙니다. 어떤 아이디어?

나의 이해는 + 다른 모듈 I에서, 하나 이상의 ?는 0 또는 1 *은 입력 문자열은 10 * 10로오고 그래서 분명 뭔가 잘못했다

+1

그것은 나를 위해 일합니다 ... (모두 말했듯이'e'는''1.0 ''과 같습니다.) – mgilson

+1

나를 위해 일합니다. . . 나는 추측하고있다 [GIGO] (http://en.wikipedia.org/wiki/Garbage_in,_garbage_out); ''1.0 * 1.0 ''에 넣으면, 전에 e가 설정되어있는 것인가? – ernie

+4

여기는 당신의 문제는 아니지만 정규 표현식 ('r '\ d + \.? ..... .....')에 원시 문자열을 사용하는 습관을 버리는 것이 훨씬 낫다. '\ b' 또는 무엇인가를 추가하려고하면 혼란 스럽습니다. – Dougal

답변

0

더 0을 의미 의미 의미입니다 나는에 소수를 추가하기 전에 이루어졌다 여기에이 코드 ...

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는 acceptedChars의 x 인 경우 x는 x의 경우 x)'에'[..]'이 필요하지 않습니다. 동일하고 아마도 더 효율적입니다. :) – huon

+0

오키 토키. 감사. – FabianCook