Skip to content

Commit 309efb3

Browse files
gh-111259: Optimize recursive wildcards in pathlib (GH-111303)
Regular expression pattern `(?s:.)` is much faster than `[\s\S]`.
1 parent 67a91f7 commit 309efb3

File tree

2 files changed

+4
-3
lines changed

2 files changed

+4
-3
lines changed

Lib/pathlib.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -124,13 +124,13 @@ def _compile_pattern_lines(pattern_lines, case_sensitive):
124124
elif part == '*':
125125
part = r'.+'
126126
elif part == '**\n':
127-
# '**/' component: we use '[\s\S]' rather than '.' so that path
127+
# '**/' component: we use '(?s:.)' rather than '.' so that path
128128
# separators (i.e. newlines) are matched. The trailing '^' ensures
129129
# we terminate after a path separator (i.e. on a new line).
130-
part = r'[\s\S]*^'
130+
part = r'(?s:.)*^'
131131
elif part == '**':
132132
# '**' component.
133-
part = r'[\s\S]*'
133+
part = r'(?s:.)*'
134134
elif '**' in part:
135135
raise ValueError("Invalid pattern: '**' can only be an entire path component")
136136
else:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Optimize recursive wildcards in :mod:`pathlib`.

0 commit comments

Comments
 (0)