题:实现一个函数用来判断字符串str是否表示数值(包括科学计数法的数字,小数和整数)。
- 正则化用的非常666
import re
class Solution:
def isNumeric(self, str):
res = re.match('^\s*[+-]{0,1}((\d)+((\.)(\d)+){0,1}|((\.)(\d)+)|((\d)+(\.)))([eE][+-]{0,1}[\d]+){0,1}\s*$',str)
if res:
return True
else:
return False
- 主要关注哪些会使其返回false
class Solution:
def isNumeric(self , str: str) -> bool:
# write code here
s=str.strip()
if not s:
return False
if s[0]=="+" or s[0]=="-":
s=s[1:]
count_dot=0
count_e=0
res=False #相当于开关
for i in range(len(s)):
if '0'<=s[i]<='9':
res=True
elif s[i]=='.':#
count_dot+=1
if count_dot>1 or count_e>0:#两个小数点或者小数点在e后 直接毙掉
return False
elif s[i]=="e" or s[i]=="E":
count_e+=1
if count_e>1 or not res:#两个e或者e的前面没有数字 直接毙掉
return False
else:
print(2)
res=False #等待着是否后续有数字出现 拨开关(保证e后有数字)
elif s[i]=="+"or s[i]=="-":
if s[i-1]!="e" and s[i-1]!="E":#要是有符号又不在e后 直接毙掉
return False
elif s[i] not in ['+','-','e','E',' ']:#一旦有奇怪的字符 直接毙掉
return False
return res