From: Barry Warsaw Date: Tue, 21 Nov 2017 15:28:13 +0000 (-0500) Subject: bpo-31672 - Add one last minor clarification for idpattern (#4483) X-Git-Tag: v3.7.0a3~129 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e256b408889eba867e1d90e5e1a0904843256255;p=python bpo-31672 - Add one last minor clarification for idpattern (#4483) Add one last minor clarification for idpattern --- diff --git a/Doc/library/string.rst b/Doc/library/string.rst index 5b25428525..e9606783ef 100644 --- a/Doc/library/string.rst +++ b/Doc/library/string.rst @@ -755,13 +755,15 @@ attributes: * *idpattern* -- This is the regular expression describing the pattern for non-braced placeholders. The default value is the regular expression - ``(?-i:[_a-zA-Z][_a-zA-Z0-9]*)``. If this is given and *braceidpattern* is + ``(?a:[_a-zA-Z][_a-zA-Z0-9]*)``. If this is given and *braceidpattern* is ``None`` this pattern will also apply to braced placeholders. .. note:: Since default *flags* is ``re.IGNORECASE``, pattern ``[a-z]`` can match - with some non-ASCII characters. That's why we use local ``-i`` flag here. + with some non-ASCII characters. That's why we use the local ``a`` flag + here. Further, with the default *flags* value, including ``A-Z`` in the + ranges is redundant, but required for backward compatibility. While *flags* is kept to ``re.IGNORECASE`` for backward compatibility, you can override it to ``0`` or ``re.IGNORECASE | re.ASCII`` when diff --git a/Lib/string.py b/Lib/string.py index a3e6d91bb4..fd4b1f7a62 100644 --- a/Lib/string.py +++ b/Lib/string.py @@ -79,11 +79,14 @@ class Template(metaclass=_TemplateMetaclass): """A string class for supporting $-substitutions.""" delimiter = '$' - # r'[a-z]' matches to non-ASCII letters when used with IGNORECASE, - # but without ASCII flag. We can't add re.ASCII to flags because of - # backward compatibility. So we use local -i flag and [a-zA-Z] pattern. + # r'[a-z]' matches to non-ASCII letters when used with IGNORECASE, but + # without the ASCII flag. We can't add re.ASCII to flags because of + # backward compatibility. So we use the ?a local flag and [a-z] pattern. + # We also can't remove the A-Z ranges, because although they are + # technically redundant with the IGNORECASE flag, the value is part of the + # publicly documented API. # See https://bugs.python.org/issue31672 - idpattern = r'(?-i:[_a-zA-Z][_a-zA-Z0-9]*)' + idpattern = r'(?a:[_a-zA-Z][_a-zA-Z0-9]*)' braceidpattern = None flags = _re.IGNORECASE