Skip to content

Commit 69c5db8

Browse files
akxs-sanskar
andauthored
Make the number pattern regular expression more efficient (#1213)
I verified that all patterns parsed for importing CLDR data are parsed equivalently using the new regular expression. The inefficient regular expression was brought to our attention by GitHub user s-sanskar – thanks! Co-authored-by: s-sanskar <sanskarpok11@gmail.com>
1 parent 0ca3e6d commit 69c5db8

File tree

1 file changed

+6
-9
lines changed

1 file changed

+6
-9
lines changed

babel/numbers.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1201,14 +1201,11 @@ def _remove_trailing_zeros_after_decimal(string: str, decimal_symbol: str) -> st
12011201
return string
12021202

12031203

1204-
PREFIX_END = r'[^0-9@#.,]'
1205-
NUMBER_TOKEN = r'[0-9@#.,E+]'
1206-
1207-
PREFIX_PATTERN = r"(?P<prefix>(?:'[^']*'|%s)*)" % PREFIX_END
1208-
NUMBER_PATTERN = r"(?P<number>%s*)" % NUMBER_TOKEN
1209-
SUFFIX_PATTERN = r"(?P<suffix>.*)"
1210-
1211-
number_re = re.compile(f"{PREFIX_PATTERN}{NUMBER_PATTERN}{SUFFIX_PATTERN}")
1204+
_number_pattern_re = re.compile(
1205+
r"(?P<prefix>(?:[^'0-9@#.,]|'[^']*')*)"
1206+
r"(?P<number>[0-9@#.,E+]*)"
1207+
r"(?P<suffix>.*)",
1208+
)
12121209

12131210

12141211
def parse_grouping(p: str) -> tuple[int, int]:
@@ -1239,7 +1236,7 @@ def parse_pattern(pattern: NumberPattern | str) -> NumberPattern:
12391236
return pattern
12401237

12411238
def _match_number(pattern):
1242-
rv = number_re.search(pattern)
1239+
rv = _number_pattern_re.search(pattern)
12431240
if rv is None:
12441241
raise ValueError(f"Invalid number pattern {pattern!r}")
12451242
return rv.groups()

0 commit comments

Comments
 (0)