Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.7k
GH-110109: Drop use of new regex features inpathlib._abc.#113292
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Closed
Uh oh!
There was an error while loading.Please reload this page.
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
A regex group with a `?+` possessive quantifier was used to match emptypaths, which were represented as a single dot, preventing the dot frombeing matched by other wildcards. This quantifier is only available fromPython 3.11+, but pathlib's `_abc.py` file will be made available as a PyPIpackage for Python 3.8+.This commit adds a new private `_pattern_str` property that works like`__str__()` but represents empty paths as `''` rather than `'.'`. Thisstring is used for pattern matching, which removes the need for thepossessive group.Improves compatibility with older Python; no other change of behaviour.
8 tasks
ContributorAuthor
barneygale commentedDec 19, 2023
I think this is slower, but only very slightly: $ ./python -m timeit -s"from pathlib import Path; p = Path('foo.py')""p.match('*.py')"50000 loops, best of 5: 4.75 usec per loop# before50000 loops, best of 5: 4.81 usec per loop# after$ ./python -m timeit -s"from pathlib import Path""list(Path.cwd().glob('**/*', follow_symlinks=True))"5 loops, best of 5: 81 msec per loop# before5 loops, best of 5: 81 msec per loop# after |
ContributorAuthor
barneygale commentedDec 22, 2023
@AlexWaygood pointed me towardsthis video, which shows how to implement atomic groups/posessive qualifiers in older Python using a capturing lookahead and a backref. It's a one-line patch so I'll apply it only in the external |
Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading.Please reload this page.
A regex group with a
?+possessive quantifier was used to match empty paths, which were represented as a single dot, preventing the dot from being matched by other wildcards. This quantifier is only available from Python 3.11+, but pathlib's_abc.pyfile will be made available as a PyPI package for Python 3.8+.This commit adds a new private
_pattern_strproperty that works like__str__()but represents empty paths as''rather than'.'. This string is used for pattern matching, which removes the need for the possessive group. We also replacere.NOFLAGwith0, again for backwards-compatibility with older Python.Improves compatibility with older Python; no other change of behaviour.
See external
pathlib_abcissue:barneygale/pathlib-abc#8