如何在unicode范围之间填充空格?

时间:2017-10-29 23:27:02

标签: python regex string unicode python-2.x

目标是在满足issubset条件时填充带空格的字符,例如

[IN]:

subset = [chr(ordinal) for ordinal in range(ord(u'\u31c0'), ord(u'\u31ef'))]

text = '这是个小㇈㇋伙子'

[OUT]:

output_text = '这是个小 ㇈ ㇋ 伙子'

我可以这样做:

def issubset(uchar):
    if u'\u31c0' <= uchar <= u'\u31ef':
        return True
    return False

def pad_space_ifsubset(text):
    output = ""
    for ch in text:
        if issubset(ch):
            output +=  " " + ch + " "
        else:
            output += ch
    return output

text = '这是个小㇈㇋伙子'

pad_space_ifsubset(text)

但有更简单的方法吗?也许正则表达式?

2 个答案:

答案 0 :(得分:2)

您可以在感兴趣的代码点上使用范围模式re.sub,替换字符串中的组反向引用(\g<0>将替换匹配的整个子字符串,或者在这种情况下,替换单个字符从范围):

import re

def pad_space_ifsubset(text):
    return re.sub(u'[\u31c0-\u31ef]', ' \g<0> ', text)

例如:

>>> text = u'这是个小㇈㇋伙子'
>>> print pad_space_ifsubset(text)
这是个小 ㇈  ㇋ 伙子

答案 1 :(得分:0)

我看到的一件事是,在这种情况下,你的函数issubset似乎毫无用处。如果不是绝对需要创建一个函数,您可以使用此代码:

def pad_space_ifsubset(text):
    output = ""
    for ch in text:
         if u'\u31c0' <= ch <= u'\u31ef':
            output +=  " " + ch + " "
        else:
            output += ch
     return output

text = '这是个小㇈㇋伙子'

pad_space_ifsubset(text)

对于空间填充,你有很多选择,但这是我选择的那个:

output += ' %s ' %ch

请注意,您所使用的内容在我看来还不错。这是一个非常简单的案例,您的填充空间解决方案是可读的。