allow optional whitespace around parameters similar to other language implementations
diff --git a/pyiceberg/types.py b/pyiceberg/types.py
index 3c98215..f530450 100644
--- a/pyiceberg/types.py
+++ b/pyiceberg/types.py
@@ -57,7 +57,7 @@
 from pyiceberg.utils.parsing import ParseNumberFromBrackets
 from pyiceberg.utils.singleton import Singleton
 
-DECIMAL_REGEX = re.compile(r"decimal\((\d+),\s*(\d+)\)")
+DECIMAL_REGEX = re.compile(r"decimal\(\s*(\d+)\s*,\s*(\d+)\s*\)")
 FIXED = "fixed"
 FIXED_PARSER = ParseNumberFromBrackets(FIXED)
 
diff --git a/tests/test_types.py b/tests/test_types.py
index 5e95687..27f4cac 100644
--- a/tests/test_types.py
+++ b/tests/test_types.py
@@ -514,6 +514,21 @@
     assert decimal.scale == 25
 
 
+@pytest.mark.parametrize(
+    "decimal_str",
+    [
+        "decimal(9,2)",
+        "decimal(9, 2)",
+        "decimal( 9, 2 )",
+        "decimal( 9 , 2 )",
+        "decimal(9 ,2)",
+    ],
+)
+def test_deserialization_decimal_optional_whitespace(decimal_str: str) -> None:
+    # Readers accept optional whitespace around parameters and the separator.
+    assert DecimalType.model_validate_json(f'"{decimal_str}"') == DecimalType(9, 2)
+
+
 def test_deserialization_decimal_failure() -> None:
     with pytest.raises(ValidationError) as exc_info:
         _ = DecimalType.model_validate_json('"decimal(abc, def)"')