gpt4 book ai didi

涉及星体平面的 unicode 范围的 Python 语义

转载 作者:行者123 更新时间:2023-11-28 21:47:16 24 4
gpt4 key购买 nike

如果范围的一个或两个端点在 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 的编译时标志?
  • 有没有办法在不区分大小写的情况下获得一致的行为?
  • 如果区分大小写是不可避免的,具体的条件是什么?

最佳答案

只需在输入字符串中使用 u 前缀即可告诉 Python 这是一个 Unicode 字符串:

>>> bool(re.match(u"[\u1000-\U00021111]", u"\u1234")) # <= See u"\u1234"
True

在 Python 2.7 中,每次处理字符串时都需要将它们解码为 Unicode。在 Python 3 中,默认情况下所有字符串都是 Unicode,并在 docs 中说明。 .

关于涉及星体平面的 unicode 范围的 Python 语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36763476/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com