我試圖在Python 2.7.3中使用re
模塊,並使用Unicode編碼的Devnagari文本。我已將from __future__ import unicode_literals
添加到我的代碼的頂部,因此所有字符串文字都應該是unicode對象。Python unicode正則表達式匹配失敗,一些unicode字符-bug或錯誤?
但是,我遇到了Python的正則表達式匹配的一些奇怪的問題。例如,考慮這個名字:「किशोरी」。這是由我的一位用戶輸入的(拼寫錯誤)印地文名稱。任何印地語讀者都會認識到這是一個詞。
下返回匹配,因爲它應該:
re.search("^[\w\s][\w\s]*","किशोरी",re.UNICODE)
但這並不:
re.search("^[\w\s][\w\s]*$","किशोरी",re.UNICODE)
一些洞穴探險發現,只有一個在這串字符,字符0915 (क),被認爲屬於\ w字符類。這是不正確的,因爲Unicode字符數據庫file on "derived core properties"列出了這個字符串中的其他字符(我沒有檢查全部)作爲字母 - 就像它們一樣。
這只是Python實現中的一個錯誤嗎?我可以通過手動定義所有Devnagari字母數字字符作爲字符範圍來解決這個問題,但這會很痛苦。或者我做錯了什麼?
是的,可以確認正則表達式模塊的工作。 [[:alnum:]] POSIX字符類也適用於正則表達式模塊。 – ShankarG
@ShankarG:'perl'同意:'echoकिशोरी| perl -CS -ne'print if/^ \ w + $ /''(假設utf-8 io)。 – jfs
將我的「已接受」標記更改爲此答案,因爲這實際上是正確的答案 - 確實是re模塊中的一個錯誤。 – ShankarG