Issue 1456280: Traceback error when compiling Regex (original) (raw)
Traceback error when compiling the following regular expression. Error discovered with Python 2.4.2. Used pre from python2.3 to check the validity of re_fmt. With pre it works fine.
Question: I submitted a sre error report before and I warned to take off pre from the library. It is of advantage to be able to check a failing re with pre. Personally I feel sre has still too many bugs to completely substitute pre.
Regards
Wolfgang Grafen
======================================================
chios scalar 582 % ./fmtscalar.py Traceback (most recent call last): File "./fmtscalar.py", line 21, in ? re_fmt = re.compile( File "/user/freepool/local/lib/python2.3/sre.py", line 179, in compile return _compile(pattern, flags) File "/user/freepool/local/lib/python2.3/sre.py", line 230, in _compile raise error, v # invalid expression sre_constants.error: nothing to repeat
---- cut here ---- #!/usr/bin/env python2.3
-- coding: Latin-1 --
import sre as re
re_fmt = re.compile( "(" "%" "(?P" "\d+" "(?:" "[.]" "\d+" ")" ")?" "(?:" "[(]" "(?P" "[^)]*" ")?" "[)]" ")?" "(?P[a-z])" ")" )
a="%s" b="aber%sxyz" c="aber%3.1i" c="aber%(quengel)s"
for i in a,b,c: m = re_fmt.findall(i) print i,m ---- cut here ---
This is another version of the redundant repeat issue defined in issues 2537 and 1633953 and although not described by the original report for issue 214033, the comments further down that issue also describe a similar situation.
In this case, the problem arises from the '(]*)?[)]' portion of your regexp code because you have a zero-or-more repeat repeated zero-or-one times, which in the current version of python causes this error. Technically, the outer zero-or-one operator ('?') is redundant and you can eliminate it, but this IMHO should not cause the error listed below and I will look into a solution in issue 2636.