Regular expression pattern `(?s:.)` is much faster than `[\s\S]`.
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:
--- /dev/null
+Optimize recursive wildcards in :mod:`pathlib`.