Lele Gaifax wrote:
> Peter Otten <__pete...@web.de> writes:
>> Lele Gaifax wrote:
>>> The original intent is to replace spaces within a string with the
>>> regular expression \s+ (see
>>> Accordingly to the documentation
>>> (https://docs.python.org/3.6/library/re.html#re.sub) “unknown escapes
>>> [in the repl argument] such as \& are left alone”.
>> According to
>> rejection of \s is intentional
>> Changed in version 3.6: Unknown escapes consisting of '\' and an ASCII
>> letter now are errors.
> So, how am I supposed to achieve the mentioned intent? By doubling the
> escape in the replacement?
If there are no escape sequences aimed to be handled by re.sub() you can
escape the replacement wholesale:
>>> re.sub(r'\s+', re.escape(r'\s+'), 'foo bar')
OK, that probably escaped too much. Second attempt:
>>> re.sub(r'\s+', lambda m: r'\s+', 'foo bar')
Better? If that's too much work at runtime:
>>> def double_bs(s): return "\\\\".join(s.split("\\"))
>>> re.sub(r'\s+', double_bs(r'\s+'), 'foo bar')
>> though IMHO the traceback needs a cleanup.
> And the documentation as well, to clarify the fact immediately, without
> assuming one will scroll down to the "changed in version" part (at least,
> that is what seem the rule in other parts of the manual).
> Thank you,
> ciao, lele.