本文主要是介绍【Python Cookbook】S01E19 在字符串的开头或者结尾处做文本匹配,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 问题
- 解决方案
- 讨论
问题
如果我们需要在字符串的开头或者结尾处按照指定的文本模式做检查,例如检查文件的扩展名,URL协议类型等等。
解决方案
检查如扩展名等结尾的文本模式,选择 str.startswith()
方法,检查如URL协议类型等开头的文本模式,选择 str.endswith()
方法。
file_name = "spam.txt"
print(file_name.endswith(".txt"))url = "http://www.python.org"
print(url.startswith("http:"))
结果:
True
True
如果需要匹配多个文本模式,则只需在 startswith()
方法和 endswith()
方法中提供包含所有可能的元组参数即可。
filenames = ['Makefile', 'foo.c', 'bar.py', 'spam.c', 'spam.h']
print([name for name in filenames if name.endswith(('.c', '.h'))])
print(any(name.endswith('.py') for name in filenames))
结果:
['foo.c', 'spam.c', 'spam.h']
True
需要注意的是,函数 startswith()
与 endswith()
中,若需要匹配多个文本模式,其参数必须为元组而非列表等。
print([name for name in filenames if name.endswith(['.c', '.h'])])
# 输出错误信息
>>> TypeError: endswith first arg must be str or a tuple of str, not list
讨论
虽然为了前缀与后缀内容,我们有很多方法:
# 切片法
print([filename[-2:] == '.c' for filename in filenames])
# 正则表达式法
import re
url = "http://www.python.org"
print(re.match('http:|https:|ftp:', url))
切片法不够优雅,有局限性,正则表达式法又有些过于重量级。使用本节内容中的两个函数相对来说更加简单,且运行更快。更重要的是,其可以与生成器表达式等结合在一起,实现更多效果功能。
这篇关于【Python Cookbook】S01E19 在字符串的开头或者结尾处做文本匹配的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!