对python 匹配字符串开头和结尾的方法详解


Posted in Python onOctober 27, 2018

1、你需要通过指定的文本模式去检查字符串的开头或者结尾,比如文件名后缀,URL Scheme 等等。检 查 字 符 串 开 头 或 结 尾 的 一 个 简 单 方 法 是 使 用str.startswith() 或 者 是str.endswith()方法。比如:

>>> filename = 'spam.txt'
>>> filename.endswith('.txt')
True
>>> filename.startswith('file:')
False
>>> url = 'http://www.python.org'
>>> url.startswith('http:')
True
>>>

2、如果你想检查多种匹配可能,只需要将所有的匹配项放入到一个元组中去,然后传给 startswith()或者 endswith() 方法:

>>> import os
>>> filenames = os.listdir('.')
>>> filenames
[ 'Makefile', 'foo.c', 'bar.py', 'spam.c', 'spam.h' ]
>>> [name for name in filenames if name.endswith(('.c', '.h')) ]
['foo.c', 'spam.c', 'spam.h'
>>> any(name.endswith('.py') for name in filenames)
True
>>>
 
#示例2
from urllib.request import urlopen
def read_data(name):
 if name.startswith(('http:', 'https:', 'ftp:')):
 return urlopen(name).read()
 else:
 with open(name) as f:
  return f.read()

奇怪的是,这个方法中必须要输入一个元组作为参数。如果你恰巧有一个list 或者 set类型的选择项,要确保传递参数前先调用 tuple()将其转换为元组类型。比如:

>>> choices = ['http:', 'ftp:']
>>> url = 'http://www.python.org'
>>> url.startswith(choices)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: startswith first arg must be str or a tuple of str, not list
>>> url.startswith(tuple(choices))
True
>>>

3、startswith() 和 endswith() 方法提供了一个非常方便的方式去做字符串开头和结尾的检查。类似的操作也可以使用切片来实现,但是代码看起来没有那么优雅。比如:

>>> filename = 'spam.txt'
>>> filename[-4:] == '.txt'
True
>>> url = 'http://www.python.org'
>>> url[:5] == 'http:' or url[:6] == 'https:' or url[:4] == 'ftp:'
True
>>>

4、你可以能还想使用正则表达式去实现,比如:

>>> import re
>>> url = 'http://www.python.org'
>>> re.match('http:jhttps:jftp:', url)
<_sre.SRE_Match object at 0x101253098>
>>>

5、当和其他操作比如普通数据聚合相结合的时候 startswith()和endswith() 方法是很不错的。比如,下面这个语句检查某个文件夹中是否存在指定的文件类型:

if any(name.endswith(('.c', '.h')) for name in listdir(dirname)):
...

以上这篇对python 匹配字符串开头和结尾的方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现对字符串的加密解密方法示例
Apr 29 Python
Python实现比较扑克牌大小程序代码示例
Dec 06 Python
15行Python代码带你轻松理解令牌桶算法
Mar 21 Python
python逆序打印各位数字的方法
Jun 25 Python
Python数据分析matplotlib设置多个子图的间距方法
Aug 03 Python
详解python while 函数及while和for的区别
Sep 07 Python
python+Splinter实现12306抢票功能
Sep 25 Python
python 重命名轴索引的方法
Nov 10 Python
django商品分类及商品数据建模实例详解
Jan 03 Python
python字符串判断密码强弱
Mar 18 Python
利用jupyter网页版本进行python函数查询方式
Apr 14 Python
Python 制作查询商品历史价格的小工具
Oct 20 Python
Python判断以什么结尾以什么开头的实例
Oct 27 #Python
浅谈Python脚本开头及导包注释自动添加方法
Oct 27 #Python
使用python实现http及ftp服务进行数据传输的方法
Oct 26 #Python
python 快速把超大txt文件转存为csv的实例
Oct 26 #Python
python针对不定分隔符切割提取字符串的方法
Oct 26 #Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
Oct 26 #Python
Python异常的检测和处理方法
Oct 26 #Python
You might like
基于mysql的论坛(4)
2006/10/09 PHP
php中ob函数缓冲机制深入理解
2015/08/03 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
2019/06/05 PHP
jquery分页插件AmSetPager(自写)
2013/04/15 Javascript
关于Jquery操作Cookie取值错误的解决方法
2013/08/26 Javascript
JavaScript实现的图像模糊算法代码分享
2014/04/22 Javascript
如何判断微信内置浏览器(通过User Agent实现)
2014/09/01 Javascript
JS实现判断碰撞的方法
2015/02/11 Javascript
js实现点击切换TAB标签实例
2015/08/21 Javascript
使用javaScript动态加载Js文件和Css文件
2015/10/24 Javascript
jQuery图片左右滚动代码 有左右按钮实例
2016/06/20 Javascript
jQuery中JSONP的两种实现方式详解
2016/09/26 Javascript
详解axios在node.js中的post使用
2017/04/27 Javascript
node.js实现微信JS-API封装接口的示例代码
2017/09/06 Javascript
基于nodejs实现微信支付功能
2017/12/20 NodeJs
使用wxapp-img-loader自定义组件实现微信小程序图片预加载功能
2018/10/18 Javascript
详解实现一个通用的“划词高亮”在线笔记功能
2019/04/23 Javascript
js动态获取时间的方法分析
2019/08/02 Javascript
基于Vue的侧边目录组件的实现
2020/02/05 Javascript
Python获取任意xml节点值的方法
2015/05/05 Python
python计算一个序列的平均值的方法
2015/07/11 Python
Python3 pandas 操作列表实例详解
2019/09/23 Python
python set集合使用方法解析
2019/11/05 Python
在python中利用dict转json按输入顺序输出内容方式
2020/02/27 Python
利用Python制作动态排名图的实现代码
2020/04/09 Python
基于python实现获取网页图片过程解析
2020/05/11 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
2020/06/09 Python
详解CSS3 Media Queries中媒体属性的使用
2016/02/29 HTML / CSS
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
公安个人四风问题对照检查及整改措施
2014/10/28 职场文书
毕业生评语大全
2015/01/04 职场文书
2015年安全保卫工作总结
2015/05/14 职场文书
上级领导检查欢迎词
2015/09/30 职场文书
详解MySQL连接挂死的原因
2021/05/18 MySQL
一篇文章带你学习Mybatis-Plus(新手入门)
2021/08/02 Java/Android