2010-10-01 20 views
18

如何指定一個範圍從' '(空格)到\u00D7FF的Unicode字符?如何指定一個Unicode字符範圍

我有一個正則表達式,如r'[\u0020-\u00D7FF]',它不會編譯,說這是一個很差的範圍。我是Unicode正則表達式的新手,所以我之前沒有遇到過這個問題。

有沒有辦法讓這個編譯或一個正則表達式,我忘了或還沒有學會呢?

+0

它編譯罰款這裏(2.6.5) – NullUserException 2010-10-01 01:23:13

+0

你說得對 - 這並編譯 - 我有我認爲這是我正在研究的正則表達式的一部分,這是有問題的。我會發布導致我問題的部分。 – spig 2010-10-01 01:25:59

回答

24

你的unicode範圍的語法不會你期望什麼。

  1. 原始r''串防止被解析\u逃逸,並且正則表達式引擎將無法做到這一點。在本組中僅有的範圍是[0-\]

    >>> re.compile(r'[\u0020-\u00d7ff]', re.DEBUG) 
    in 
        literal 117 
        literal 48 
        literal 48 
        literal 50 
        range (48, 117) 
        literal 48 
        literal 48 
        literal 100 
        literal 55 
        literal 102 
        literal 102 
    
  2. 使其成爲一個Unicode文本causes \u parsing while leaving other backslashes alone(雖然這裏是不是一個問題),但前導零被搞亂它。語法是\uxxxx\Uxxxxxxxx,所以它被解析爲「\u00d7,f,f」。

    >>> re.compile(ur'[\u0020-\u00d7ff]', re.DEBUG) 
    in 
        range (32, 215) 
        literal 102 
        literal 102 
    
  3. 刪除前導零或切換到\U0000d7ff將修復它:

    >>> re.compile(ur'[\u0020-\ud7ff]', re.DEBUG) 
    in 
        range (32, 55295) 
    
+1

非常感謝 - 我不知道所有unicode的東西。所以,它必須是4位數,小寫字母'u',大寫字母'U'是8,對吧? – spig 2010-10-01 02:36:54

+0

這是正確的。 – 2010-10-01 03:54:20

+0

請注意,這個答案是在Python 2的語境下完成的。在Python 3中,例子「'」和「ur」例子''之間沒有區別。 – Flimm 2018-01-22 16:46:20

5

如果你使用的是Python 2.x中,你應該確保你指定一個Unicode字符串(帶u',或「統一」內置):

>>> r = re.compile(u'[\u0020-\uD7FF]') 
>>> r.search(u'foo \uD7F0 bar') 
<_sre.SRE_Match object at 0xb7084950> 
r.search(u' ') 
<_sre.SRE_Match object at 0xb7084b48> 

使用原始字符串(與你一樣,用r'')給你(ascii)字符串,由「backstroke」+字母「u」加數字0加...

+0

當\ u不夠長到4長時,您是否需要'0'字符?就像一個空間,你只有\ u20但你必須寫\ u0020 ?,對嗎? – spig 2010-10-01 02:39:51

+0

我看你已經回答了,但是,是的,這是正確的:) – rbp 2010-10-04 12:33:38

+1

**完整的Unicode **呢?例如,哥特區塊從U + 10330 GOTHIC LETTER AHSA通過U + 1034A GOTHIC LETTER NURN HUNDRED運行,但是還包括當前未命名的下五個代碼點?你如何在Python中表達其他編程語言允許你使用'\ p {Gothic}','\ p {Script = Gothic}','\ p {InGothic}'或'\ p {Block = Gothic}''對於?例如,在Perl中,'/ \ pN/&&/\ p {InGothic} /'會產生U + 10341 GOTHIC LETTER NINETY和U + 1034A GOTHIC NUTE 100。但是,這在Python中不起作用;爲什麼不? – tchrist 2010-11-02 12:36:49

相關問題