字符串里面的一些方法也是很有意思的,我们一个一个方法去看,看完这个篇文章希望大家都应该去掌握。
find方法
我们看第一个方法叫做find方法,这个是小写,记住全部小写。find方法是在可以在一个较长的字符串里边查找子串,返回子串所在的位置。
# find方法, 返回字符串最左端的索引
# 没找到就返回 -1
title = "Monty Python's Flying Circus!"
print(title.find("Python" ))
# 第2个参数指定起始值,第3个参数指定结束值
print(title.find("Python",7))
print(title.find("Python",6, 20))
结果:
6
-1
6
find方法,有三个参数,这个self是指自身。方法签名:
str.find(str, beg=0, end=len(string))
代码示例:
如上,sentence = “The python is great”,这样一个字符串,在里边来找python。从左往右,第四位开始的,因此,find python的返回值就是4了。find还有第二个参数,表示起始位置,就是从哪个位置开始寻找,如果把第二位设置为9,那么返回值就是-1,因为没有找到。那么,find的第三个参数是终止位置,意思是到某个位置位置,从原始字符串来看,起始位置3,到终止位置7的内容是 pyth,在这个字符串中,是找不到python的,因此也返回了-1。
join方法
join就是连接的意思,它是用来连接序列中的元素。这里边有个注意事项,说所需要被连接的序列的元素,都必须是字符串。如下使用示例:
# join方法
# 链接序列中的元素
student_names = ["Alice","Bob","Bela"]
print("+".join(student_names))
# numbers里放的是数字,join会报错
numbers = [1,2,3]
print("-".join(numbers))
# linux下的路径
dirs = (" ","home","bob")
print("/".join(dirs))
# windows下的路径,"\\"转义符
print("c:"+"\\".join(dirs))
结果:
Alice+Bob+Bela
/home/bob
c:\home\bob
student_names,有元素Alice,Bob,还有Bela。如果想打这几个元素,并且以+号连接,怎么去做的加号,它的格式如上,“+”.join(),参数就是数组student_names,打印来看,结果:Alice+Bob+Bela。 这里提示了注意事项,说在连接中,不能是数字,我们这是一个列表,这个列表里面放的是数字。那print出来,然后还用这个加号,还有我们刚才学的这个join,这时候报错了,他抛出的异常的很明确,叫做类型错误,期望的是一个字符串类型的。
注意连接的元素都是字符串,大家运行以后自己去观察一下,有连接字符串,也有拆分字符串,这个操作就是split,以下详细来看。
split方法
split用来将字符串分割成序列,其与join方法相反。注意:如不提供分隔符,程序会把所有空格作为分隔符(空格、制表、换行等)。方法签名:
str.split(str="", num=string.count(str))
第一个参数是分隔符,第二个参数是分割次数,默认为 -1, 即分隔多次。使用示例:
# split方法
print("1+2+3+4+5".split("+"))
print("/home/Bob".split("/"))
print("hello world!+Bob".split())
结果:
['1', '2', '3', '4', '5']
['', 'home', 'Bob']
['hello', 'world!+Bob']
代码示例:
再来sentence = “hello world!”,然后,print(sentence.split()),什么都不用加,结果返回了一个列表:[“hello”, “world!”]。什么也不加,程序会把所有的空格作为分隔符。再看下一个,numbers = “1+2+3+4”,这是一个字符串,中间有多个+号,用
numbers.split("+")
来分割,结果:[‘1’, ‘2’, ‘3’, ‘4’]。那么,如果是一个路径,如上“/home/bob”,这样的路径,就可以通过“/”将其分割出来,由于有一个反斜杠在最前面有一个,所以分割后,有3个元素的数组,第一个元素就是一个空字符串。
lower方法
lower方法返回字符串的小写字母字符串。方法签名:
str.lower()
lower方法没有任何参数,就是将被操作字符串转换为小写并返回结果。使用示例:
# lower方法
names = "Hello WOrld!"
print(names.lower())
student_names = ["alice","bob","bela"]
student_name = "Bob"
if student_name.lower() in student_names:
print(True)
else:
print(False)
结果:
hello world!
True
如上,student_name为Alice,其中的首字母是大写。首先,通过调用lower,然后print出来,看看结果:alice。那么,在student_names中,都是小写字母的名称,如果希望通过in判断名称是否包含在student_names数组中,就需要将原始字符串也进行小写转换,然后再判断有没有匹配。当student_name不转换而直接判断,那么结果就是False了。示例代码:
replace方法
replace方法返回某字符串的所有匹配项均被替换之后的字符串。方法签名:
str.replace(old, new[, max])
old -- 将被替换的子字符串。
new -- 新字符串,用于替换old子字符串。
max -- 可选字符串, 替换不超过 max 次
代码使用示例:
# replace
print("this is a apples".replace("apples","pears"))
# strip
# 字符串lower方法与strip方法的使用
name = " Gumy "
names = ["gumy", "leo", "jones"]
namebak = name.lower()
if namebak.strip() in names:
print('find it')
else:
print("Not find it")
# 去除指定的字符
print("*** SPAM * for everyone!!! ***".strip("*!"))
结果:
this is a pears
find it
SPAM * for everyone!!!
那么接下来看replace方法,比如place方法呢,是返回某字符串中所有匹配项均被替换后的字符串,如上代码,字符串“this is a apples”,通过replace,把apples替换成peers。程序示例:
strip方法
strip方法返回去除两侧(不包含内部)空格的字符串。也可以指定去除的字符。方法签名:
str.strip([chars]);
chars -- 移除字符串头尾指定的字符序列。
strip方法,是去除两侧字符串,比如两侧的空格。如下,student_name = ” Bob “,Bob前后都有空格,然后student_names中,虽然有Bob,但如果直接比较,将不会找到Bob,需要转小写的同时,去除其前后两个空格。如下:
去除空格后,student_name打印了不带空格的字符串。将Bob转小写,然后判断是否在student_names中,结果就是True。
translate方法
translate方法只处理单个字符。它的优势在于可以同时进行多个替换。方法签名:
str.translate(table[, deletechars]);
table -- 翻译表,翻译表是通过maketrans方法转换而来。
deletechars -- 字符串中要过滤的字符列表。
使用示例:
# translate()方法语法:
# str.translate(table);
# 参数table -- 翻译表
str = "this is string example....wow!!!"
intab = "aeiou"
outtab = "12345"
trantab = str.maketrans(intab, outtab)
print(str.translate(trantab))
结果:
th3s 3s str3ng 2x1mpl2....w4w!!!
translate处理是单个字符串,它的优势是可以同时替换多个,相比于replace则只能进行一个。代码实例:
translate之前,这里有一个特殊操作,那就是将oldsub和newsub转换为输入和输出字典,让二者进行映射,这个关键方法就是maketrans方法。
总结
本文讲到find、join、split、join方法,然后lower,还有strip,最后是replace和translate,这些方法都是常用的字符串操作,大家在后面的学习中需要熟练掌握,灵活应用。