Skip to content

Commit

Permalink
pythongh-111259: Optimize recursive wildcards in pathlib (pythonGH-11…
Browse files Browse the repository at this point in the history
…1303)

Regular expression pattern `(?s:.)` is much faster than `[\s\S]`.
  • Loading branch information
serhiy-storchaka authored and aisk committed Feb 11, 2024
1 parent bc7df6b commit 1f0243e
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 3 deletions.
6 changes: 3 additions & 3 deletions Lib/pathlib.py
Expand Up @@ -124,13 +124,13 @@ def _compile_pattern_lines(pattern_lines, case_sensitive):
elif part == '*':
part = r'.+'
elif part == '**\n':
# '**/' component: we use '[\s\S]' rather than '.' so that path
# '**/' component: we use '(?s:.)' rather than '.' so that path
# separators (i.e. newlines) are matched. The trailing '^' ensures
# we terminate after a path separator (i.e. on a new line).
part = r'[\s\S]*^'
part = r'(?s:.)*^'
elif part == '**':
# '**' component.
part = r'[\s\S]*'
part = r'(?s:.)*'
elif '**' in part:
raise ValueError("Invalid pattern: '**' can only be an entire path component")
else:
Expand Down
@@ -0,0 +1 @@
Optimize recursive wildcards in :mod:`pathlib`.

0 comments on commit 1f0243e

Please sign in to comment.