在混合unicode-ascii字符串中用空格填充ascii字符

时间:2017-07-07 09:11:19

标签: python regex unicode ascii

给出unicode和ascii chars的混合字符串,例如:

它看灵魂塑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造得和学问同等重要。

如何在混合unicode-ascii字符串中用空格填充ascii字符?

1 个答案:

答案 0 :(得分:2)

模式应为:

([\x00-\x7f]+)

所以你可以使用:

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

这会产生:

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

ASCII定义为一系列字符,其中十六进制代码介于007f之间。因此,我们将此范围定义为[\x00-\x7f],使用+表示一个或多个,并将匹配的组替换为r' \1 '以添加两个空格。