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

我仔细看了下 这个匹配好像没问题啊

0
6
weixin_慕斯卡4281563
回复
7七月
谢谢老师。 字符串也好,列表也好,都是可迭代对象。 先比较两个对象的第0个元素,大小关系即为对象的大小关系,如果相等则继续比较后续元素,先终止迭代的认为是小的。 这句话深刻地解释了 数字构成的字符串比较法则。
2019-05-17
共6条回复

Python3.8系统入门+进阶 (程序员必备第二语言)

语法精讲/配套练习+思考题/原生爬虫实战

14447 学习 · 4438 问题

查看课程