这是我要问的模块:https://pypi.org/project/regex/,这是Matthew Barnett的regex
。
在项目描述页面中,V0和V1之间的行为差异表示为(请注意,以粗体显示):
新旧行为
为了与
re
模块兼容,该模块有2个 行为:
版本0的行为(旧的行为,与re模块兼容):
请注意,re模块的行为可能会随时间而变化,并且 我将努力在版本0中匹配该行为。
- 由
VERSION0
或V0
标志或模式中的(?V0)
表示。- Unicode中不区分大小写的匹配使用简单的大小写折叠 默认。
版本1行为(新行为,可能与 re模块):
- 由
VERSION1
或V1
标志或模式中的(?V1)
表示。- 默认情况下,Unicode中不区分大小写的匹配使用大小写折叠。
如果未指定版本,则正则表达式模块将默认为
regex.DEFAULT_VERSION
。
我自己尝试了一些示例,但没有弄清楚它的作用:
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import regex
>>> r = regex.compile("(?V0i)и")
>>> r
regex.Regex('(?V0i)и', flags=regex.I | regex.V0)
>>> r.search("И")
<regex.Match object; span=(0, 1), match='И'>
>>> regex.search("(?V0i)é", "É")
<regex.Match object; span=(0, 1), match='É'>
>>> regex.search("(?V0i)é", "E")
>>> regex.search("(?V1i)é", "E")
简单案例折叠与完整案例折叠有什么区别?还是可以提供一个示例(不区分大小写的正则表达式)匹配V1中的某个内容,而不匹配V0中的某个内容?
答案 0 :(得分:1)
它紧跟Unicode case folding table。摘录:
# The entries in this file are in the following machine-readable format:
#
# <code>; <status>; <mapping>; # <name>
#
# The status field is:
# C: common case folding, common mappings shared by both simple and full mappings.
# F: full case folding, mappings that cause strings to grow in length. Multiple characters are separated by spaces.
# S: simple case folding, mappings to single characters where different from F.
[...]
# Usage:
# A. To do a simple case folding, use the mappings with status C + S.
# B. To do a full case folding, use the mappings with status C + F.
折叠仅针对一些特殊字符有所不同,例如小而大写的拉丁字母s:
00DF; F; 0073 0073; # LATIN SMALL LETTER SHARP S
[...]
1E9E; F; 0073 0073; # LATIN CAPITAL LETTER SHARP S
1E9E; S; 00DF; # LATIN CAPITAL LETTER SHARP S