2.2. 匹配字符串的头或尾

Method

str.startswith()
str,endswith()

Discussion

检查字符串首尾的简单方法

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

检查多个字段

>>> 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
>>>
FunctionDescription
os.listdir(path)返回path下文件目录的列表
any(obj)或逻辑。判断obj是否为空对象,如果都为空、0、false,则返回false,如果不都为空、0、false,则返回true。
all(obj)与逻辑。obj对象的所有元素不为0、”、False或者x为空对象,则返回True,否则返回False

另一个例子

from urllib.request import urlopen

def read_data(name):
    #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
>>>

利用切片、正则表达式的前缀后缀检查

>>> filename = 'spam.txt'
>>> filename[-4:] == '.txt'
True
>>> url = 'http://www.python.org'
>>> url[:5] == 'http:' or url[:6] == 'https:' or url[:4] == 'ftp:'
True
>>>
>>> import re
>>> url = 'http://www.python.org'
>>> re.match('http:|https:|ftp:', url)
<_sre.SRE_Match object at 0x101253098>
>>>

对于简单的匹配或检查问题,str.startswith()str.endswith()更为简单且更具可读性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值