2012-04-03 53 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空格。