10-12最后的问题疑惑
来源:10-12 把函数作为参数传递
weixin_慕斯卡4281563
2019-05-17
最后老师提出一个问题s = 'A83C72D1D8E67’对这个字符串做替换要求
1.单个出现的数字剔除掉
2.两位数的话大于等于50的用100替换,小于50的用0替换
我用下面代码试了
s = 'A83C72D1D8E67'
def convert(value):
print('re.sub传到convert里的参数是什么类型的:', value)
matched = value.group()
if matched >= '50':
return '100'
elif (matched >= '10' and matched < '50'):
return '0'
elif matched < '10':
return ''
r = re.sub('d+', convert, s)
print(r)
运行结果:
re.sub传到convert里的参数是什么类型的: <re.Match object; span=(1, 3), match=‘83’>
re.sub传到convert里的参数是什么类型的: <re.Match object; span=(4, 6), match=‘72’>
re.sub传到convert里的参数是什么类型的: <re.Match object; span=(7, 8), match=‘1’>
re.sub传到convert里的参数是什么类型的: <re.Match object; span=(9, 10), match=‘8’>
re.sub传到convert里的参数是什么类型的: <re.Match object; span=(11, 13), match=‘67’>
A100C100DD100E100
发现这里两位数83,72,67的替换都是按照预期的替换成100
一位数的1按照预期替换成了空字符
但是那个一位数的8怎么被替换成100而不是按照预期替换成空字符呢?即期望的结果应该是A100C100DDE100才对啊?
下面这样就对对了
s = 'A83C72D1D8E67'
def convert(value):
print('re.sub传到convert里的参数是什么类型的:', value)
matched = value.group()
print('value.group()后的类型:{}, 值是:{}'.format(type(matched),matched))
if int(matched) >= 50:
return '100'
elif int(matched) >= 10 and int(matched) < 50:
return '0'
elif int(matched) < 10:
return ''
r = re.sub('\d+', convert, s)
print(r)
re.sub传到convert里的参数是什么类型的: <re.Match object; span=(1, 3), match=‘83’>
value.group()后的类型:<class ‘str’>, 值是:83
re.sub传到convert里的参数是什么类型的: <re.Match object; span=(4, 6), match=‘72’>
value.group()后的类型:<class ‘str’>, 值是:72
re.sub传到convert里的参数是什么类型的: <re.Match object; span=(7, 8), match=‘1’>
value.group()后的类型:<class ‘str’>, 值是:1
re.sub传到convert里的参数是什么类型的: <re.Match object; span=(9, 10), match=‘8’>
value.group()后的类型:<class ‘str’>, 值是:8
re.sub传到convert里的参数是什么类型的: <re.Match object; span=(11, 13), match=‘67’>
value.group()后的类型:<class ‘str’>, 值是:67
A100C100DDE100
1回答
-
7七月
2019-05-17
我仔细看了下 这个匹配好像没问题啊
062019-05-17
相似问题