给出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字符?
答案 0 :(得分:2)
模式应为:
([\x00-\x7f]+)
所以你可以使用:
patt = re.compile('([\x00-\x7f]+)')
patt.sub(r' \1 ',s)
这会产生:
>>> print(patt.sub(r' \1 ',s))
它看灵魂塑 Nike 造得和学问同等重要。
ASCII定义为一系列字符,其中十六进制代码介于00
和7f
之间。因此,我们将此范围定义为[\x00-\x7f]
,使用+
表示一个或多个,并将匹配的组替换为r' \1 '
以添加两个空格。