2015-02-07 146 views
0

我似乎無法替代'''或'('而不會導致其他字符串中的錯誤。 ')'和'('是特殊字符。這裏有兩個字符串「sample(志信達).mbox」和「sample#宋安興.mbox」。如果我用re替換字符,漢字也會受到替換。這裏是在Python代碼:中文字符未被python字符串替換的特殊字符

# -*- coding: utf-8 -*- 
import re 
source1='sample(志信達).mbox' 
source2='sample#宋安興.mbox' 
newname1=re.sub(r'[\(\);)(]','-',source1) 
newname2=re.sub(r'[\(\);)(]','-',source2) 
print source1,newname1 
print source2,newname2 

下面是結果: '? - '

sample(志信達).mbox sample---志信達---.mbox 
sample#宋安興.mbox sample#宋?-興.mbox 

注意的人物之一,被替換

+0

[如何在Python中搜索和替換utf-8特殊字符?](http://stackoverflow.com/questions/2054746/how-to-search-and-replace-utf-8-special-字符在Python中) – alfasin 2015-02-07 18:21:31

+1

每個中文字符在UTF-8中表示爲3個字節,因此它被替換爲3' - ' – 2015-02-07 18:22:17

回答

1

你應該使用unicode文本(見https://docs.python.org/2/howto/unicode.html#unicode-literals-in-python-source-code):

# -*- coding: utf-8 -*- 
import re 
source1 = u'sample(志信達).mbox' 
source2 = u'sample#宋安興.mbox' 
newname1 = re.sub(ur'[\(\);)(]','-',source1) 
newname2 = re.sub(ur'[\(\);)(]','-',source2) 
print source1,newname1 
print source2,newname2 

結果:

sample(志信達).mbox sample-志信達-.mbox 
sample#宋安興.mbox sample#宋安興.mbox 

另外,不要忘記保存您的.py文件中的UTF-8(你的IDE會自動記憶,或者您可能取決於您使用文本編輯器手動更改編碼)。

+0

這就是我得到的結果:「... SyntaxError:非ASCII字符'\ xef'in文件...「 – alfasin 2015-02-07 18:23:00

+0

可能是默認編碼的問題,你把# - * - 編碼:UTF - * - 在頂部? – 2015-02-07 18:23:21

+0

@alfasin:您應該將文件保存爲UTF-8,並且不要忘記頂部的編碼聲明。 – Selcuk 2015-02-07 18:24:13