Python字符串匹配:startswith与endswitch高效用法解析

顾星河
顾星河
发布时间:2026-10-12 | 1人浏览过
原创

本文详解Python中检查字符串开头与结尾的两种核心方法:startswith()和endswith()。通过元组参数实现多模式匹配,对比字符串切片与正则表达式的优劣,并结合文件过滤等实际场景,提供高效且优雅的代码实现方案。

1、在实际开发中,经常需要根据特定的文本模式来验证字符串的起始或结束部分,例如判断文件后缀名或URL协议类型。实现这一需求最直观且高效的方式是调用字符串对象的startswith()或endswith()方法。具体示例如下:

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

2、若需同时检查多种可能的匹配模式,只需将这些模式封装为一个元组,并作为参数传递给startswith()或endsworth()方法即可:

>>> 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() 

值得注意的是,该方法严格要求参数必须是字符串或字符串元组。如果备选方案存储为列表或集合类型,在调用前必须使用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 相关产品和应用

全部下载

专题列表