当字符落在 unicode 范围之间时如何用空格填充字符?

How to pad a character with spaces when it falls between a unicode range?

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

[在]:

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

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

[输出]:

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)

但是有没有更简单的方法来做到这一点?也许用正则表达式?

您可以将 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)
这是个小 ㇈  ㇋ 伙子

嗯,我看到的一件事是你的函数 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)

对于 space 填充,您有很多选择,但我会选择这个:

output += ' %s ' %ch

请注意,我认为您使用的很好。这是一个非常简单的案例,您的填充 spaces 解决方案是可读的。