如何指定一個範圍從' '
(空格)到\u00D7FF
的Unicode字符?如何指定一個Unicode字符範圍
我有一個正則表達式,如r'[\u0020-\u00D7FF]'
,它不會編譯,說這是一個很差的範圍。我是Unicode正則表達式的新手,所以我之前沒有遇到過這個問題。
有沒有辦法讓這個編譯或一個正則表達式,我忘了或還沒有學會呢?
如何指定一個範圍從' '
(空格)到\u00D7FF
的Unicode字符?如何指定一個Unicode字符範圍
我有一個正則表達式,如r'[\u0020-\u00D7FF]'
,它不會編譯,說這是一個很差的範圍。我是Unicode正則表達式的新手,所以我之前沒有遇到過這個問題。
有沒有辦法讓這個編譯或一個正則表達式,我忘了或還沒有學會呢?
你的unicode範圍的語法不會你期望什麼。
原始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
使其成爲一個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
刪除前導零或切換到\U0000d7ff
將修復它:
>>> re.compile(ur'[\u0020-\ud7ff]', re.DEBUG)
in
range (32, 55295)
如果你使用的是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加...
當\ u不夠長到4長時,您是否需要'0'字符?就像一個空間,你只有\ u20但你必須寫\ u0020 ?,對嗎? – spig 2010-10-01 02:39:51
我看你已經回答了,但是,是的,這是正確的:) – rbp 2010-10-04 12:33:38
**完整的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
它編譯罰款這裏(2.6.5) – NullUserException 2010-10-01 01:23:13
你說得對 - 這並編譯 - 我有我認爲這是我正在研究的正則表達式的一部分,這是有問題的。我會發布導致我問題的部分。 – spig 2010-10-01 01:25:59