目标是在满足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)
但有更简单的方法吗?也许正则表达式?
答案 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
请注意,您所使用的内容在我看来还不错。这是一个非常简单的案例,您的填充空间解决方案是可读的。