Python2.7如何从包含汉字和数字的字符串中截取数字

    xiaoxiao2021-03-25  105

    今天有一个小伙伴想要从“498人”这个字符串里截取数字出来,我脑子里虽然飘过不少方法,但是觉得不码出来就等于是空的。网上找了些资料,总结出了一些干货,在此记录下来。

    首先先看一个字符串:

    mystring = u'今年18岁'

    这个字符串有汉字还有数字,现在我们要提取出其中的数字,或许我们马上就会想到一种方法:切片。 的确,切片的确可以简单粗暴的解决一些事情,比如这个字符串,从第三位到倒数第二位就是数字。代码如下:

    mystring = u'今年18岁' print(mystring)[2:-1]

    运行结果如下:

    18

    方括号中的2为起始索引,这里指的第三位,-1为结束索引,这里指的是倒数第二位,结合起来取的就是18这个数字了。完整的切片操作格式是[start:stop:step],step指步长,具体作用这里不做展开。

    貌似这个方法甚好,小伙伴们打完收工就要去喝咖啡了,但是这个方法太死,万一字符串做变动,这个方法就不适用了,比如我把这个字符串改成“我今年18岁你信吗”,这代码是不是也要跟着改了?

    这个时候就要搬出比较高级的用法了:filter()函数~ 来看看官方解释: 简单说来就是,用一个自定function来过滤iterable,那么这里的关键就是怎么写这个function了。到这里又要用到一个函数str.isdigit,这个函数是用来判断字符串是否只有数字组成,组合起来使用就是:filter(str.isdigit, iterable),把序列(iterable)的每一项传到自定义的过滤函数(str.isdigit)里来处理,代码如下:

    mystring = u'今年18岁' print(filter(str.isdigit, mystring))

    不过这段代码运行起来会报错:

    TypeError: descriptor 'isdigit' requires a 'str' object but received a 'unicode'

    由于mystring是unicode类型,这里只要做一下转码就可以,做完后我们用type函数来验证一下:

    mystring2 = mystring.encode('gbk') print(type(mystring2))

    打印结果:

    <type 'str'>

    最后附上完整代码:

    # encoding:utf-8 mystring = u'今年18岁' mystring2 = mystring.encode('gbk') print(type(mystring2)) print(filter(str.isdigit, mystring2))

    这样就能实现快速从字符串中截取数字了:

    <type 'str'> 18
    转载请注明原文地址: https://ju.6miu.com/read-40354.html

    最新回复(0)