Python2.7如何从包含汉字和数字的字符串中截取数字
2017-03-13 15:50
302 查看
今天有一个小伙伴想要从“498人”这个字符串里截取数字出来,我脑子里虽然飘过不少方法,但是觉得不码出来就等于是空的。网上找了些资料,总结出了一些干货,在此记录下来。
首先先看一个字符串:
这个字符串有汉字还有数字,现在我们要提取出其中的数字,或许我们马上就会想到一种方法:切片。
的确,切片的确可以简单粗暴的解决一些事情,比如这个字符串,从第三位到倒数第二位就是数字。代码如下:
运行结果如下:
方括号中的2为起始索引,这里指的第三位,-1为结束索引,这里指的是倒数第二位,结合起来取的就是18这个数字了。完整的切片操作格式是[start:stop:step],step指步长,具体作用这里不做展开。
貌似这个方法甚好,小伙伴们打完收工就要去喝咖啡了,但是这个方法太死,万一字符串做变动,这个方法就不适用了,比如我把这个字符串改成“我今年18岁你信吗”,这代码是不是也要跟着改了?
这个时候就要搬出比较高级的用法了:filter()函数~
来看看官方解释:
简单说来就是,用一个自定function来过滤iterable,那么这里的关键就是怎么写这个function了。到这里又要用到一个函数str.isdigit,这个函数是用来判断字符串是否只有数字组成,组合起来使用就是:filter(str.isdigit, iterable),把序列(iterable)的每一项传到自定义的过滤函数(str.isdigit)里来处理,代码如下:
不过这段代码运行起来会报错:
由于mystring是unicode类型,这里只要做一下转码就可以,做完后我们用type函数来验证一下:
打印结果:
最后附上完整代码:
这样就能实现快速从字符串中截取数字了:
首先先看一个字符串:
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
相关文章推荐
- C#、Java实现按字节截取字符串包含中文汉字和英文字符数字标点符号等
- python 中如何判断一个字符串中包不包含汉字
- [Python Tip]如何判断一个字符串只包含数字字符
- 如何判断一个字符串只包含数字字符
- C# 根据字节数截取字符串(区别汉字,英文,数字)
- 如何实现截取无规则字符串中的数字部分
- Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
- 不区分汉字还是英文和数字,按指定字节长度截取字符串
- Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
- java截取包含汉字字符串
- Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转...
- Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
- Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
- 求中英文混合字符串长度,中英文混合字符串截取(汉字2个字节,字母数字等1个字节),字符转ASCII码,ASCII码转字符
- Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
- java中判断一个字符串是否“都为数字”和“是否包含数字”和“截取数字”
- 包含汉字的字符串截取,及相关
- Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
- 获取包含中文,字母,数字集合的字符串的长度(1个汉字字符存储需要2个字节,1个英文字符存储需要1个字节)
- 黄聪:Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)