3

範囲の一方または両方のエンドポイントが 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 に関するコンパイル時のフラグにも依存しますか?
  • 大文字と小文字を区別せずに一貫した動作を得る方法はありますか?
  • ケースの区別が避けられない場合、正確にはどのような条件がありますか?
4

2 に答える 2