classification
Title: fnmatch regular expression can be improved
Type: behavior Stage: resolved
Components: Library (Lib) Versions: Python 2.7
process
Status: closed Resolution: rejected
Dependencies: Superseder:
Assigned To: Nosy List: Alberto Galera, r.david.murray
Priority: normal Keywords:

Created on 2015-11-25 14:43 by Alberto Galera, last changed 2015-11-25 15:06 by r.david.murray. This issue is now closed.

Messages (2)
msg255361 - (view) Author: Alberto Galera (Alberto Galera) Date: 2015-11-25 14:43
# https://hg.python.org/cpython/file/tip/Lib/fnmatch.py
fnmatch reviewing the code I've noticed that the outcome of the regular expression all returns generated in the first result

l97:
            res = res + '.*'
to:
            res = res + '.*?'

l100:
    return res + '\Z(?ms)'
to:
    return res + '$(?ms)'


example test:

import re
import fnmatch

urls = ['example/l1/l2/test3-1.py',
        'example/l1/test2-1.py',
        'example/l1/test2-2.py',
        'example/l1/l2/l3/test4-1.py']

regex = fnmatch.translate('example/*')
# 'example\\/.*\\Z(?ms)'
re.findall(regex, "\n".join(urls))
# return ['example/l1/l2/test3-1.py\nexample/l1/test2-1.py\nexample/l1/test2-2.py\nexample/l1/l2/l3/test4-1.py']

# suggested change 
re.findall('example\\/.*?$(?ms)', "\n".join(urls))
# return ['example/l1/l2/test3-1.py',
#         'example/l1/test2-1.py',
#         'example/l1/test2-2.py',
#         'example/l1/l2/l3/test4-1.py']
msg255362 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2015-11-25 15:06
That would be a backward incompatible behavior change.  The patterns are designed to be used on single filenames, not on newline separated filenames.
History
Date User Action Args
2015-11-25 15:06:27r.david.murraysetstatus: open -> closed

nosy: + r.david.murray
messages: + msg255362

resolution: rejected
stage: resolved
2015-11-25 14:43:46Alberto Galeracreate