python 字符串编程技巧
2015-09-21 13:51
344 查看
针对多个分割符号拆分字符串
在字符串开头和结尾做匹配
查找和替换文本
不区分大小写进行匹配
从字符串中去掉不需要的字符
字符串连接及结合问题
?
针对多个分割符号拆分字符串
python中str自带的split()方法可以差分字符串但是只能拆分固定的单个的字符,不如按’ ‘(空格)拆分等
用正则表达式re模块中中的split可以解决这个问题
正则表达式中的split要比str中的split强大的多,它支持正则表达式
不熟悉正则表达式的可以戳 python的正则表达式
?
在字符串开头和结尾做匹配。
比如匹配指定后缀的文件提取出文件名,指定前缀的url
我们可以使用str中的startswith()和endswith()方法
?
查找和替换文本
在给定的字符串中,我们找到指定的字符串并且将它替换掉
简单的替换我们可以用str.replace()来替换,复杂的就要用到re模块的sub方法了
?
不区分大小写进行匹配
用re.IGNORECASE标记即可,还有其他的标记,比如DOTALL是忽略\n回车的,这在过滤html等文本标记语言非常有用
?
从字符串中去掉不需要的字符
我们想在字符串的开头或中间或结尾去除不必要的字符,比如空格等
strip()方法可以帮我们完成这个任务,lstrip()和rstrip()分别从左边和右边开始,默认情况下去除的是空格,注意去除字符不会对字符串中间的字符起作用,可以结合生成器一起使用,过滤剔除字符
?
字符串连接及结合问题
表面上看这个问题没有什么特别之处,但是我们一般会忽略性能这个问题,比如如下代码
‘+=’ 或者’+’操作能很好的完成字符串连接,但是它的性能是非常低的,原因是内存拷贝和垃圾回收产生的影响。这种做法比下面做法慢很多
对于简单的我们可以直接使用python的print函数(python3中print编程了函数写法为print()),功能也相应增加了
函数如下
注意:
对字符串的操作我们我们需要谨慎,因为如果是大量字符串的话,可能会产生性能问题,比如一个加载大量字符串到内存,会产生内存不足的情况等,此时可以使用生成器yield,含有yield的函数会被编译成生成器对象,这个对象支持迭代器接口,可以迭代的将对象加载进入内存,这样就不需要担心刚才的问题了。
含有yield关键字的函数不像一般函数执行完毕会return退出(生成器函数不允许return),生成器yield函数会在执行完毕后自动挂起暂停状态并保存暂停时的状态,以便于下次继续执行
在字符串开头和结尾做匹配
查找和替换文本
不区分大小写进行匹配
从字符串中去掉不需要的字符
字符串连接及结合问题
?
针对多个分割符号拆分字符串
python中str自带的split()方法可以差分字符串但是只能拆分固定的单个的字符,不如按’ ‘(空格)拆分等
用正则表达式re模块中中的split可以解决这个问题
#从line过滤出多个分割符,提取出需要的内容,提取出需要的 __author__ = 'wwh' import re line = 'asdf fasd; asdqw, asdqw, awsdasd foo' #r是原生字符串的意思,会忽略转移字符 #'[;,\s]\s*'意思是匹配[]中任何一个字符包括';',',','\s',在接着可能会包含0个或0个以上的空格字符,\s是空格,*是0个或0个以上 NewLine = re.split(r'[;,\s]\s*', line) print(NewLine)
正则表达式中的split要比str中的split强大的多,它支持正则表达式
不熟悉正则表达式的可以戳 python的正则表达式
?
在字符串开头和结尾做匹配。
比如匹配指定后缀的文件提取出文件名,指定前缀的url
我们可以使用str中的startswith()和endswith()方法
__author__ = 'wwh' filename = [ '1.txt', '2.py', '3.py', '4.py', '5.c' ] #过滤出.c和.py结尾的文件,注意endswith和startswith参数是一个元组 print([name for name in filename if name.endswith(('.c', '.py'))])
?
查找和替换文本
在给定的字符串中,我们找到指定的字符串并且将它替换掉
简单的替换我们可以用str.replace()来替换,复杂的就要用到re模块的sub方法了
__author__ = 'wwh' import re #将11/27/2012日期格式换成2012-11-27`这种 line = 'Today is 11/27/2012, PyCon starts 3/13/2013' #使用re模块的sub方法 #(\d+)指的是1个或者多个字符,()是捕获组,来捕获指定的字串,'\3-\1- 2'是重新组装日期 ret = re.sub(r'(\d+)/(\d+)/(\d+)', r'\3-\1-\2', line) print(ret)
?
不区分大小写进行匹配
用re.IGNORECASE标记即可,还有其他的标记,比如DOTALL是忽略\n回车的,这在过滤html等文本标记语言非常有用
__author__ = 'wwh' import re #过滤出python,要求不区分大小写 line = 'PYTHON, python, PyThOn' print(re.findall('python', line, re.IGNORECASE))
?
从字符串中去掉不需要的字符
我们想在字符串的开头或中间或结尾去除不必要的字符,比如空格等
strip()方法可以帮我们完成这个任务,lstrip()和rstrip()分别从左边和右边开始,默认情况下去除的是空格,注意去除字符不会对字符串中间的字符起作用,可以结合生成器一起使用,过滤剔除字符
__author__ = 'wwh' line = ' hello world , good moring ' #剔除首尾的空格 print(line.strip(' ')) lines = [ ' hehe ', 'ha haha ', 'xi xi ', ' heihei' ] #使用生成器 t = (i.strip() for i in lines) for s in t: print(s)
?
字符串连接及结合问题
表面上看这个问题没有什么特别之处,但是我们一般会忽略性能这个问题,比如如下代码
s = 'hello ' t = 'world' for i in range(10): s += t
‘+=’ 或者’+’操作能很好的完成字符串连接,但是它的性能是非常低的,原因是内存拷贝和垃圾回收产生的影响。这种做法比下面做法慢很多
__author__ = 'wwh' parts = [ 'good', 'morning', 'hello', 'world?' ] #' '是连接字符串中间穿插的字符,也可以是其他任何字符 #可以针对列表,元组,字典,文件,集合或生成器 print(' '.join(parts)) #使用生成器的join相对更好,因为可以加上一些处理对每个元素,处理过程中完成连接 print(' '.join(s for s in parts))
对于简单的我们可以直接使用python的print函数(python3中print编程了函数写法为print()),功能也相应增加了
__author__ = 'wwh' a = '1' b = '2' c = '3' print(a,b,c,sep = ':', end='\n')
函数如下
注意:
对字符串的操作我们我们需要谨慎,因为如果是大量字符串的话,可能会产生性能问题,比如一个加载大量字符串到内存,会产生内存不足的情况等,此时可以使用生成器yield,含有yield的函数会被编译成生成器对象,这个对象支持迭代器接口,可以迭代的将对象加载进入内存,这样就不需要担心刚才的问题了。
含有yield关键字的函数不像一般函数执行完毕会return退出(生成器函数不允许return),生成器yield函数会在执行完毕后自动挂起暂停状态并保存暂停时的状态,以便于下次继续执行
相关文章推荐
- wxpython核心部件wx.treectrl
- Selenium Python Safari for Mac 环境搭建
- python第三方库系列之二十五--pip库
- python socket编程详细介绍
- 2015/9/20 Python基础(16):类和实例
- 某Python群的入群题目
- 2015/9/19 Python基础(15):变量作用域及生成器
- 2015/9/18 Python基础(14):函数式编程
- 【Python】Talk Python To Me Podcast播客
- 【Python】Talk Python To Me Podcast播客
- 关于 python 中的 ImportError: No module named 的问题解决
- Python入门小程序
- Python+OpenCV学习(20)---对极几何
- python字典和列表各种嵌套排序
- Python常用第三方模块PIL(anaconda下载)
- Mac下配置mysql-python
- python中正则表达式以及re模块的使用
- Python:类属性,实例属性,私有属性与静态方法,类方法,实例方法
- Python常用功能汇总
- Python+OpenCV学习(19)---摄像机位姿估计