Re: Adding new escapes to regex module

MRAB <[email protected]> Wed, 17 Aug 2022 19:23:02 +0100
Newsgroups gmane.comp.python.devel
Message-ID <[email protected]>
On 2022-08-17 17:34, MRAB wrote:
> On 2022-08-17 08:25, Serhiy Storchaka wrote:
>> 16.08.22 23:24, MRAB пише:
>>> Other regex implementations have escape sequences for horizontal 
>>> whitespace (`\h` and `\H`) and vertical whitespace (`\v` and `\V`).
>>> 
>>> The regex module already supports `\h`, but I can't use `\v` because it 
>>> represents `\0x0b', as it does in the re module.
>>> 
>>> Now that someone has asked for it, I'm trying to find a nice way of 
>>> adding it, and I'm currently thinking that maybe I could use `\y` and 
>>> `\Y` instead as they look a little like `\v` and `\V`, and, also, 
>>> vertical whitespace is sort-of in the y-direction.
>>> 
>>> As far as I can tell, only ProgressSQL uses them, and, even then, it's 
>>> for what everyone else writes as `\b` and `\B`.
>>> 
>>> I want the regex module to remain compatible with the re module, in case 
>>> they get added there sometime in the future.
>>> 
>>> Opinions?
>> 
>> I do not like introducing escapes which are not supported in other RE
>> implementations. There is a chance of future conflicts.
>> 
>> Java broke compatibility in Java 8 by redefining \v from a single
>> vertical tab character to the vertical whitespace class. I am not sure
>> that it is a good example that we should follow, because different
>> semantic of \v in raw and non-raw strings is a potential source of bugs.
>> But with special flag which controls the meaning of \v it may be more safe.
>> 
>> Horizontal whitespace can be matched by [
>> \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000] in re or [\t\p{Zs}]
>> in regex. Vertical whitespace can be matched by
>> [\n\x0b\f\r\x85\u2028\u2029]. Note that there is a dedicated Unicode
>> category for horizontal whitespaces (excluding the tab itself), but not
>> for vertical whitespaces, it means that vertical whitespaces are less
>> important.
>> 
>> In any case it is simple to introduce special Unicode categories and use
>> \p{ht} and \p{vt} for horizontal and vertical whitespaces.
 >
> It's not just Java. Perl supports all 4 of \h, \H, \v and \V. That might 
> be why Java 8 changed.
> I've found that Perl has \p{HorizSpace} and \p{VertSpace}, so I'm going 
with that.
_______________________________________________
Python-Dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at https://mail.python.org/archives/list/[email protected]/message/UKT4YPABIEEDK3XYSVLTF2ALWUVEPW5Z/
Code of Conduct: http://python.org/psf/codeofconduct/