如果范围的一个或两个端点都在 BMP 之外,那么正则表达式中字符范围的预期语义到底是什么?我观察到以下输入在 Python 2.7 和 3.5 中的行为不同:
import re
bool(re.match(u"[\u1000-\U00021111]", "\u1234"))
在我的 2.7 中,我得到False
了,在 3.5 中我得到了True
。后者对我来说很有意义。前者可能是由于\U00021111
由代理对表示\ud844\udd11
,但即使那样我也不明白,因为\u1000-\ud844
应该包含\u1234
就好了。
- 这是在某处指定的吗?
- 这是预期的行为吗?
- 这仅取决于 Python 版本,还是取决于有关 UTF-16 与 UTF-32 的编译时标志?
- 有没有办法在不区分大小写的情况下获得一致的行为?
- 如果区分大小写是不可避免的,那么条件是什么?