2017-07-07 150 views
1

鑑於Unicode和ASCII字符的混合字符串,如:填充ASCII字符的字符串

它看靈魂塑Nike造得和學問同等重要。 

目標是墊的ASCII字符串用空格,即:

它看靈魂塑 Nike 造得和學問同等重要。 

我試過使用([^[:ascii:]])正則表達式,它在匹配子字符串時看起來很好,例如https://regex101.com/r/FVHhU1/1

但是在代碼中,用' \1 '代替沒有達到所需的輸出。

>>> import re 
>>> patt = re.compile('([^[:ascii:]])') 
>>> s = u'它看靈魂塑Nike造得和學問同等重要。' 
>>> print (patt.sub(' \1 ', s)) 
它看靈魂塑Nike造得和學問同等重要。 

如何墊ASCII字符與混合Unicode的ASCII字符串空間?

+1

只是說,但如果你已經設置regex101 python模式,你會注意到這不適用於python。 –

回答

2

的圖案應該是:

([\x00-\x7f]+) 

因此可以使用:

patt = re.compile('([\x00-\x7f]+)') 
patt.sub(r' \1 ',s) 

這產生:

>>> print(patt.sub(r' \1 ',s)) 
它看靈魂塑 Nike 造得和學問同等重要。 

ASCII被定義爲範圍與十六進制代碼的字符在007f之間。所以我們將這樣的範圍定義爲,使用+來表示中的一個或多個,並用r' \1 '替換匹配組以添加兩個空格。