Searching for positive, negative and / or decimal places, can you use [+-]?\d+(?:\.\d+)?
>>> nums = re.compile(r"[+-]?\d+(?:\.\d+)?") >>> nums.search("0.123").group(0) '0.123' >>> nums.search("+0.123").group(0) '+0.123' >>> nums.search("123").group(0) '123' >>> nums.search("-123").group(0) '-123' >>> nums.search("1").group(0) '1'
This is not very smart about leading / trailing zeros, of course:
>>> nums.search("0001.20000").group(0) '0001.20000'
Change Fixed above regex to find single bit numbers.
If you want to add exponential support, try [+-]?\d+(?:\.\d+)?(?:[eE][+-]?\d+)? :
>>> nums2 = re.compile(r"[+-]?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?") >>> nums2.search("-1.23E+45").group(0) '-1.23E+45' >>> nums2.search("0.1e-456").group(0) '0.1e-456' >>> nums2.search("1e99").group(0) '1e99'
source share