从python中的字符串确定“值的类型”
发布时间:2020-12-20 13:02:20 所属栏目:Python 来源:网络整理
导读:我正在尝试在 python中编写一个函数,它将确定字符串中的值的类型;例如 如果in string为1或0或True或False,则该值为BIT 如果in string为0-9 *,则值为INT 如果在字符串中是0-9 .0-9,则该值为float 如果在字符串中是stg更多(文本等)值是文本 到目前为止,我已经
我正在尝试在
python中编写一个函数,它将确定字符串中的值的类型;例如
如果in string为1或0或True或False,则该值为BIT 如果in string为0-9 *,则值为INT 如果在字符串中是0-9 .0-9,则该值为float 如果在字符串中是stg更多(文本等)值是文本 到目前为止,我已经喜欢了 def dataType(string): odp='' patternBIT=re.compile('[01]') patternINT=re.compile('[0-9]+') patternFLOAT=re.compile('[0-9]+.[0-9]+') patternTEXT=re.compile('[a-zA-Z0-9]+') if patternTEXT.match(string): odp= "text" if patternFLOAT.match(string): odp= "FLOAT" if patternINT.match(string): odp= "INT" if patternBIT.match(string): odp= "BIT" return odp 但是我在python中使用正则表达式并不是很熟练.你能告诉我,我做错了什么?例如,它不适用于2010-00-10,它应该是Text,但是INT或20.90,它应该是float但是是int 解决方法
在你走到正则表达式路线太远之前,你考虑过使用
ast.literal_eval
例子: In [35]: ast.literal_eval('1') Out[35]: 1 In [36]: type(ast.literal_eval('1')) Out[36]: int In [38]: type(ast.literal_eval('1.0')) Out[38]: float In [40]: type(ast.literal_eval('[1,2,3]')) Out[40]: list 也可以使用Python为你解析它! 好的,这是一个更大的例子: import ast,re def dataType(str): str=str.strip() if len(str) == 0: return 'BLANK' try: t=ast.literal_eval(str) except ValueError: return 'TEXT' except SyntaxError: return 'TEXT' else: if type(t) in [int,long,float,bool]: if t in set((True,False)): return 'BIT' if type(t) is int or type(t) is long: return 'INT' if type(t) is float: return 'FLOAT' else: return 'TEXT' testSet=[' 1 ',' 0 ','True','False',#should all be BIT '12','34l','-3','03',#should all be INT '1.2','-20.4','1e66','35.','- .2','-.2e6',#should all be FLOAT '10-1','def','10,2','[1,2]','35.9.6','35..','.'] for t in testSet: print "{:10}:{}".format(t,dataType(t)) 输出: 1 :BIT 0 :BIT True :BIT False :BIT 12 :INT 34l :INT -3 :INT 03 :INT 1.2 :FLOAT -20.4 :FLOAT 1e66 :FLOAT 35. :FLOAT - .2 :FLOAT -.2e6 :FLOAT 10-1 :TEXT def :TEXT 10,2 :TEXT [1,2] :TEXT 35.9.6 :TEXT 35.. :TEXT . :TEXT 如果你肯定有一个正则表达式解决方案,产生相同的结果,这里是: def regDataType(str): str=str.strip() if len(str) == 0: return 'BLANK' if re.match(r'True$|^False$|^0$|^1$',str): return 'BIT' if re.match(r'([-+]s*)?d+[lL]?$',str): return 'INT' if re.match(r'([-+]s*)?[1-9][0-9]*.?[0-9]*([Ee][+-]?[0-9]+)?$',str): return 'FLOAT' if re.match(r'([-+]s*)?[0-9]*.?[0-9][0-9]*([Ee][+-]?[0-9]+)?$',str): return 'FLOAT' return 'TEXT' 我不能推荐高级版本的正则表达式;让Python解释它认为这些数据类型的内容而不是用正则表达式解释它们… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |