对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分析apache访问日志脚本分享
Feb 26 Python
python调用Delphi写的Dll代码示例
Dec 05 Python
Python程序员面试题 你必须提前准备!
Jan 16 Python
Django项目实战之用户头像上传与访问的示例
Apr 21 Python
Python使用sorted对字典的key或value排序
Nov 15 Python
python celery分布式任务队列的使用详解
Jul 08 Python
利用python实现AR教程
Nov 20 Python
Python&amp;&amp;GDAL实现NDVI的计算方式
Jan 09 Python
下载与当前Chrome对应的chromedriver.exe(用于python+selenium)
Jan 14 Python
Django静态资源部署404问题解决方案
May 11 Python
python3.9和pycharm的安装教程并创建简单项目的步骤
Feb 03 Python
python中 Flask Web 表单的使用方法
May 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
一个PHP的String类代码
2010/04/20 PHP
PHP Global定义全局变量使用说明
2013/08/15 PHP
PHP动态生成javascript文件的2个例子
2014/04/11 PHP
php导出csv格式数据并将数字转换成文本的思路以及代码分享
2014/06/05 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
PHP分享图片的生成方法
2018/04/25 PHP
javascript开发随笔一 preventDefault的必要
2011/11/25 Javascript
javascript继承的六大模式小结
2015/04/13 Javascript
javascript中this的四种用法
2015/05/11 Javascript
javascript实现根据3原色制作颜色选择器的方法
2015/07/17 Javascript
JavaScript中的Repaint和Reflow用法详解
2015/07/27 Javascript
举例讲解jQuery对DOM元素的向上遍历、向下遍历和水平遍历
2016/07/07 Javascript
C#微信小程序服务端获取用户解密信息实例代码
2017/03/10 Javascript
JavaScript在控件上添加倒计时功能的实现代码
2017/07/04 Javascript
Vue 实现手动刷新组件的方法
2019/02/19 Javascript
vant IndexBar实现的城市列表的示例代码
2019/11/20 Javascript
继承行为在 ES5 与 ES6 中的区别详解
2019/12/24 Javascript
vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题
2020/04/14 Javascript
Vue如何基于vue-i18n实现多国语言兼容
2020/07/17 Javascript
jQuery实现动态加载瀑布流
2020/09/01 jQuery
[42:11]TNC vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
2013/12/04 Python
Python下的subprocess模块的入门指引
2015/04/16 Python
由浅入深讲解python中的yield与generator
2017/04/05 Python
pycharm访问mysql数据库的方法步骤
2019/06/18 Python
python Opencv计算图像相似度过程解析
2019/12/03 Python
jupyter 实现notebook中显示完整的行和列
2020/04/09 Python
Python列表的深复制和浅复制示例详解
2021/02/12 Python
CSS3中的Transition过度与Animation动画属性使用要点
2016/05/20 HTML / CSS
Myprotein俄罗斯官网:欧洲第一运动营养品牌
2019/05/05 全球购物
如何启动时不需输入用户名与密码
2014/05/09 面试题
大学生思想汇报范文
2013/12/31 职场文书
中学生运动会广播稿
2015/08/19 职场文书
《天使的翅膀》读后感3篇
2019/12/20 职场文书
Golang标准库syscall详解(什么是系统调用)
2021/05/25 Golang
改造DE1103三步曲
2022/04/07 无线电