diff --git a/edn_format/edn_lex.py b/edn_format/edn_lex.py
index 42fdea7..e3b729e 100644
--- a/edn_format/edn_lex.py
+++ b/edn_format/edn_lex.py
@@ -193,13 +193,13 @@ def t_BOOLEAN(t):
 
 
 def t_FLOAT(t):
-    r"""[+-]?\d+\.\d+[M]?([eE][+-]?\d+)?"""
+    r"""[+-]?\d+(?:\.\d+([eE][+-]?\d+)?|([eE][+-]?\d+))M?"""
     e_value = 0
     if 'e' in t.value or 'E' in t.value:
-        matches = re.search('[eE]([+-]?\d+)$', t.value)
+        matches = re.search('[eE]([+-]?\d+)M?$', t.value)
         if matches is None:
             raise SyntaxError('Invalid float : {}'.format(t.value))
-        e_value = int(matches.group()[1:])
+        e_value = int(matches.group(1))
     if t.value.endswith('M'):
         t.value = decimal.Decimal(t.value[:-1]) * pow(1, e_value)
     else:

issue parsing big numbers
specifically `45e+43` and `45.4e+43M`

diff --git a/tests.py b/tests.py
index c77c273..437c2fd 100644
--- a/tests.py
+++ b/tests.py
@@ -143,7 +143,8 @@ class EdnTest(unittest.TestCase):
             ["+123N", "123"],
             ["123.2", "123.2"],
             ["+32.23M", "32.23M"],
-            ["3.23e10", "32300000000.0"]
+            ["3.23e10", "32300000000.0"],
+            ["3e10", "30000000000.0"],
         ]
 
         for literal in EDN_LITERALS:
@@ -195,6 +196,8 @@ class EdnTest(unittest.TestCase):
             "32.23M",
             "-32.23M",
             "3.23e-10",
+            "3e+20",
+            "3E+20M",
             '["abc"]',
             '[1]',
             '[1 "abc"]',

pip install -e .
parse_log_pytest
requirements.txt
pytest
3.9
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
-e git+https://github.com/swaroopch/edn_format.git@0616eb18781cd9d9394683b806b0b3033b47f371#egg=edn_format
exceptiongroup==1.2.2
iniconfig==2.1.0
packaging==24.2
pluggy==1.5.0
ply==3.10
pyRFC3339==0.2
pytest==8.3.5
pytz==2016.10
tomli==2.2.1

name: edn_format
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - exceptiongroup==1.2.2
      - iniconfig==2.1.0
      - packaging==24.2
      - pluggy==1.5.0
      - ply==3.10
      - pyrfc3339==0.2
      - pytest==8.3.5
      - pytz==2016.10
      - tomli==2.2.1
prefix: /opt/conda/envs/edn_format

tests.py::EdnTest::test_round_trip_conversion tests.py::EdnTest::test_round_trip_same
tests.py::ConsoleTest::test_dumping tests.py::EdnTest::test_dump tests.py::EdnTest::test_keyword_keys tests.py::EdnTest::test_lexer tests.py::EdnTest::test_parser tests.py::EdnTest::test_proper_unicode_escape tests.py::EdnTest::test_round_trip_inst_short tests.py::EdnTest::test_round_trip_sets tests.py::EdnInstanceTest::test_equality tests.py::EdnInstanceTest::test_hashing
edn_format/edn_lex.py
edn_format/edn_lex.py