unicode的範圍究竟有什麼預期的語義字符在正則表達式的範圍,如果範圍內的一個或兩個端點是BMP之外?我觀察到下面的輸入行爲在Python 2.7和3.5不同:Python的語義涉及星光層
import re
bool(re.match(u"[\u1000-\U00021111]", "\u1234"))
在我2.7我得到False
,在3.5我得到True
。後者對我有意義。前者或許是代理對\ud844\udd11
扯到由於\U00021111
,但即便如此,我不明白,因爲\u1000-\ud844
應包括\u1234
就好了。
- 這是指定的地方?
- 這是預期的行爲?
- 這是否僅僅依賴於Python版本,或者還有關於UTF-16與UTF-32的編譯時標誌?
- 有沒有一種方法可以獲得一致的行爲而不區分大小寫?
- 如果案件的區別是不可避免的,條件是什麼令人興奮的?
謝謝!我沒有注意到這一點,我感到很蠢。但是,根本問題仍然是:'bool(re.match(u「[u1000- \ U00021111]」,u「\ ueeee」))'仍然會給出不同的結果。我知道,在回答問題後編輯問題是一種不好的方式,這樣回答就不再適用了。無論如何,你可以跟我一起做,還是應該發佈一個新問題? – MvG
請檢查[此Python 2.7 IDEONE演示](https://ideone.com/p9Jsgv)。 'print(bool(re.match(u「[\ u1000- \ U00021111]」,u「\ ueeee」)))'打印'True'。你的Python 2.7應該設置爲允許Unicode輸入(參見'# - * - coding:utf-8 - * - 'pragma)。 –
@WiktorStribiżew'#coding:utf8'在這種情況下什麼都不做。它聲明瞭源文件本身的編碼,並且在該源中沒有非ASCII字符。 –