[Python-Dev] regex module (original) (raw)

MRAB python at mrabarnett.plus.com
Wed Jan 13 01:22:01 CET 2010


Terry Reedy wrote:

On 1/12/2010 5:10 PM, MRAB wrote:

Hi all,

I'm back on the regex module after doing other things and I'd like your opinion on a number of matters: Firstly, the current re module has a bug whereby it doesn't split on zero-width matches. The BDFL has said that this behaviour should be retained by default in case any existing software depends on it. My question is: should my regex module still do this for Python 3? Speaking personally, I'd like it to behave correctly, and Python 3 is the version where backwards-compatibility is allowed to be broken. Are you writing a new module with a new name? If so, do you expect it to replace or augment re? (This is the same question as for optparse vs. argparse, which I understand to not yet be decided.)

It's a module called 'regex'. It can be used in place of 're' by using "import regex as re", except for differences such as "\g" being a legal group reference in pattern strings.

Secondly, Python 2 is reaching the end of the line and Python 3 is the future. Should I still release a version that works with Python 2? I'm thinking that it could be confusing if new regex module did zero-width splits correctly in Python 3 but not in Python 2. And also, should I release it only for Python 3 as a 'carrot'? 2.7 is in alpha with no plans for 2.8, so unless you finish real soon, 2.7 stdlib is already out. A new engine should get some community testing before going in the stdlib. Even 3.2 beta is not that far off (8-9 months?) Do you want to do the extra work for a 2.x release on PyPI? Finally, the module allows some extra backslash escapes, eg \g, in the pattern. Should it treat ill-formed escapes, eg \g, as it would have treated them in the re module? What does re do with analogous cases? The 're' module treats r"\g" as "g"; both 're' and 'regex' treat, say, r"\q" as "q". The closest analogue to what I'm asking about is that re treats the ill-formed repeat r"x{1," as a literal, which sort of suggests that r"\g" should be treated as "g", but r"\g" is now a group reference (re would treat that as "g". Does that sound reasonable?



More information about the Python-Dev mailing list