目标是在满足 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)
这是个小 ㇈ ㇋ 伙子
我是一名优秀的程序员,十分优秀!