2012-04-03 89 views
1

使用正則表達式與語言環境和UNICODE標誌我想用Python語言編寫,測試腳本,英寸測試空白在Python

  1. 我給在ASCII以外區域具有不同組的空白字符和字符串然後使用'\ s'與re.LOCALE標誌查看輸出。
  2. 我也想補充一下。我想\S並查看該LOCALE返回的非空白字符。

現在,我怎麼能做到這一點?我應該選擇哪一個LOCALE來查看ASCII輸出的明顯差異。

# -*- Proper encoding -*- 
import re 
pat = re.compile('\s*', re.LOCALE) 
string = "string" # Proper Replacement String? 
result = pat.match(string) 
print result.group(0) 

我使用的是Ubuntu,接下來是我的shell的當前語言環境。

$locale 
LANG=en_SG.UTF-8 
LANGUAGE=en_SG:en 
LC_CTYPE="en_SG.UTF-8" 
LC_NUMERIC="en_SG.UTF-8" 
LC_TIME="en_SG.UTF-8" 
LC_COLLATE="en_SG.UTF-8" 
LC_MONETARY="en_SG.UTF-8" 
LC_MESSAGES="en_SG.UTF-8" 
LC_PAPER="en_SG.UTF-8" 
LC_NAME="en_SG.UTF-8" 
LC_ADDRESS="en_SG.UTF-8" 
LC_TELEPHONE="en_SG.UTF-8" 
LC_MEASUREMENT="en_SG.UTF-8" 
LC_IDENTIFICATION="en_SG.UTF-8" 
LC_ALL= 

順便說一句,我對UNICODE或LOCALE感知輸入/輸出(如果有的話)的經驗較少。我所知道的是,我可以在終端上使用代碼點輸入unicode字母。

+0

什麼是可能的輸入,以及該輸入的期望輸出是什麼? – apple16 2012-04-03 22:44:25

+0

輸入將是一個帶有區域設置字母的字符串,輸出將與正則表達式匹配。 – 2012-04-03 23:41:22

回答

1

在挖掘源代碼後回答我自己的問題。

在Python源代碼_sre.c

LOCALE空間的定義是這樣的 -

#define SRE_LOC_IS_SPACE(ch) (!((ch) & ~255) ? isspace((ch)) : 0) 

而且NON_SPACE類的定義是空間的否定。而已。

現在,根據定義,我們看到字符值高於255時,根本沒有進行檢查。當LOCALE標誌被設置時,ascii isspace是否被認爲是簡單的。實際上,re.LOCALE標誌對空間或非空白字符的匹配沒有額外的影響。

對於Unicode,邏輯在unicodeobject.c處理,我看到它只是一個ascii空白超集。所有的ASCII空白字符都是Unicode空白字符。

鑑於此,不可能用Python編寫程序。您可以在這裏測試「語言環境或unicode中獨有的空白字符」,不包括ascii空格。