Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当字符位于unicode范围之间时,如何用空格填充字符?_Python_Regex_String_Unicode_Python 2.x - Fatal编程技术网

Python 当字符位于unicode范围之间时,如何用空格填充字符?

Python 当字符位于unicode范围之间时,如何用空格填充字符?,python,regex,string,unicode,python-2.x,Python,Regex,String,Unicode,Python 2.x,目标是在满足issubset条件时用空格填充字符,例如 [in]: [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:

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

[in]:

[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)
def发行集(uchar):
如果u'\u31c0'可以在感兴趣的代码点上使用范围模式,并且替换字符串中的组反向引用(
\g
将替换匹配的整个子字符串,或者在这种情况下,替换范围中的单个字符):


我看到的一件事是,在本例中,您的函数
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)

请注意,在我看来,您正在使用的是很好的。这是一个非常简单的案例,您的填充空格解决方案是可读的。

您所说的更简单的方法是什么意思?效率更高,可更新?效率更高,或者只是一种不同的方式(使用regex或其他方式)。您不需要围绕整个模式的捕获组来替换为整个匹配:
re.sub(u'[\u31c0-\u31ef]','\g',text)
。你不需要,因为你没有使用任何速记字符类。@WiktorStribiżew,你是对的,没错:)我习惯性地使用
re.U
,忽略了零组。我会更新答案的,谢谢。这是明确的:对于这种情况,“应该有一个明显的方法来做。”。
import re

def pad_space_ifsubset(text):
    return re.sub(u'[\u31c0-\u31ef]', ' \g<0> ', text)
>>> text = u'这是个小㇈㇋伙子'
>>> print pad_space_ifsubset(text)
这是个小 ㇈  ㇋ 伙子
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