2017-07-07 111 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 '替换匹配组以添加两个空格。