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/