May-19-2022, 08:28 AM
(This post was last modified: May-19-2022, 08:30 AM by Gribouillis.)
I draw my 20 years old regex for floating numbers
import re def float_re(): "Retourne une expression régulière qui matche les nombres flottants littéraux" return r"[+-]? *(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?" pat = re.compile(float_re()) def parse(s): mo = pat.match(s) if mo: return (float(mo.group(0)), s[mo.end():].strip()) else: raise ValueError( 'Expected string starting with a literal float, got', s) if __name__ == '__main__': a = ['144mHz','432 mHz','1.296GHz','2.304 GHz'] for s in a: print(repr(s), parse(s))
Output:'144mHz' (144.0, 'mHz')
'432 mHz' (432.0, 'mHz')
'1.296GHz' (1.296, 'GHz')
'2.304 GHz' (2.304, 'GHz')