Skip to main content
 首页 » 编程设计

正则表达式的Python unicode编码

2025年05月04日22webabcd

我的文件中的行采用 unicode 编码,例如 D\u00f3nde est\u00e1s。 我想检查每个单词是否仅包含来自设置语言环境的字符。

这段代码并不完全有效。该字符串似乎已正确转换为 Dónde estás 并且 wordmatch 匹配每个单词,但它不考虑语言环境设置。例如。如果我将语言环境设置为 en_US,即使它们包含 ó 和 á 字符,它仍然会匹配这两个词。

使用 re.LOCALE 而不是 re.UNICODE 似乎也不起作用,两个词不再匹配 wordmatch 正则表达式。

import re 
import locale 
 
locale.setlocale(locale.LC_ALL,'en_ES') 
wordmatch=re.compile(r'^\w*$',re.UNICODE) 
 
line="D\u00f3nde est\u00e1s" 
line=line.decode('unicode_escape') 
 
for word in line.split(): 
    if wordmatch.match(word): 
        print "Matched "+word 
    else: 
        print "No match "+word 

请您参考如下方法:

更改区域设置并不直接意味着更改编码,en_US 的编码也不是强制性的ascii。例如,在我的系统上,它是 iso-8859-1,这是一种 ó 和 á 有效的编码。这可以解释为什么 re.LOCALE 不提示这些字符。

要操作编码,我宁愿使用 encode 函数也不愿使用正则表达式:

line="D\u00f3nde est\u00e1s" 
line=line.decode('unicode_escape') 
 
# get current encoding, or set to "ascii" if you want to be more restrictive 
pref_encoding = locale.getpreferedencoding() 
 
for word in line.split(): 
    try: 
        w = word.encode(pref_encoding) 
    except UnicodeEncodeError as e: 
        print "This word contains unacceptable characters: ", word 
        break