一、字符串
(一)、字符串的常用方法
1.find()和rfind(),分别用来查找一个字符串在当前字符串指定范围(默认为整个字符串)中首次和最后一次出现的位置,如果不存在,则返回-1。
>>>s='apple,peach,apple,peach'
>>>s.find('peach')
6
>>>s.find('peach',7) 从下标7开始查找
18
>>>s.find('peach',7,20)
-1
>>>s.rfind('p')
18
2.index()和rindex()与find()和rfind()函数相同,都是查找元素,只是index()和rindex()会报错,而find函数返回-1。
3.用count()返回一个字符串在当前字符串中的出现次数,不存在返回0。
4.split()和rsplit()方法分别以指定字符为分隔符,从字符串左端和右端开始将其分隔成多个字符串,返回包含分隔结果的列表,如果不指定分隔符,则字符串中的任何空白符号(包括空格、换行符、制表符等)都将认为是分隔符,返回包含最终分隔结果的列表。
>>>s='apple,peach,banana,pear'
>>>s.split(',')
>>>s
['apple','peach','banana','pear']
split()和rsplit()方法还可以指定最大分隔项数
>>>s.split(',',2)
['apple', 'peach', 'banana,pear']
5.partition()和rpartition()用来以指定字符串为分隔符将原字符串分隔为3部分,分别为分隔前的字符串,分隔符字符串,分隔符后的字符串,不过partition()只分隔一次。如果指定的分隔符不在原字符串中,则返回原字符串和两个空字符组成的元组。
>>>s='apple,peach,banana,pear'
>>>s.partition(',')
('apple', ',', 'peach,banana,pear')
#指定分隔符不在原字符串中
s='apple,peach,banana,pear'
print(s.partition(':'))
结果为
('apple,peach,banana,pear', '', '')
6.join()方法用来将列表或其他可迭代对象中多个字符串进行连接,并在相邻的两个字符串之间插入指定字符串
s=['apple','peach','banana','pear']
print(','.join(s))
结果为:
apple,peach,banana,pear
7.lower()、upper()、capitalize()、title()、swapcase(),这几个方法分别用来将字符串中的英文字母转换成小写,大写字符串,将字符串首字母转换成大写(如果第一个字符是英文字母),将每个单词的首字母变为大写以及大小写互换。
8.replace(),该方法用来替换字符串中指定字符或子字符串的所有重复出现,每次只能替换一个字符或一个字字符串,返回处理后的新字符串,不修改原字符串。
语法:replace(原字符串,替换内容)
s=('测试','非法','暴力','话')
text='这句话里含有非法内容'
for word in s:
if word in text:
text=text.replace(word,'***')
print(text)
结果为:
这句***里含有***内容
9.maketrans(),translate()
maketrans()方法用来生成字符映射表,translate()方法按映射表中的对应关系转换字符串,并替换其中的字符,使用这两个方法可以同时处理多个字符,replace()方法无法满足这一要求。
text='测试:这句话里含有非法内容,这句话含有暴力内容'
table=' '.maketrans('非法暴力','****')
print(text.translate(table))
结果为:
测试:这句话里含有**内容,这句话含有**内容
注意:此时text字符串并未改变
10.strip(),rstrip(),lstrin()这几个方法分别用来删除当前字符串两端、右端或左端的空白字符或指定字符。
删除指定字符串:
s='aabbccddeeffg'
print('aabbccddeeffg'.strip('afg'))
结果:bbccddee
注意:用strip()删除字符串并不是作为一个整体,而是一个一个扒。
(二)、字符串常量
在string模块中定义了多个字符串常量,包括数字字符,标点符号,英文符号,英文字母,大写字母,小写字母等,可以导入string模块后使用这些常量。
string.digits 包含0~9字符串。
string.letters 所有大小写字母
string.lowercase 所有小写字母
二、正则表达式
(一)、基本规则
https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md
(二)、python中re模块的主要函数
1.sub(pattern,repl,string【,count=0】)
将字符串中pattern的所有匹配项用repl替换
import re
pat='{name}'
text='Dear.{name}'
print(re.sub(pat,'Mr.Dong',text))
结果为:
Dear.Mr.Dong
2.split(pattern,repl,string[,maxsplit=0])
根据匹配模式项分隔字符串
import re
text='alpha.beta...gamma delta'
print(re.split('[\.]+',text))
结果为:
['alpha', 'beta', 'gamma delta']
注意:maxsplit为最大分隔次数。
3.findall(pattern,string[,flags])
返回字符串中模式的所有匹配项组成的列表
import re
text='alpha.beta...gamma delta'
print(re.findall('\w+',text))
结果为:
['alpha', 'beta', 'gamma', 'delta']
4.match()和search()都只匹配一个结果,但是match()是从字符串的开头开始匹配的,如果匹配的字符不是在开头处,那么它就会返回None,匹配成功返回match对象。
而search()在整个字符串或指定范围开始匹配,匹配整一个字符串得出结果。
import re
result1 = re.match('li', 'liadadafbba').group()
result2 = re.match('li', 'addadlidadaf')
print(result1, result2)
结果为:
li None
注意:group()方法不带参数意思是返回整个匹配结果。
5.正则表达式对象,使用compile()函数将正则表达式编译为正则表达式对象,使用正则表达式对象可以提高字符串处理速度,适合多次使用同一个正则表达式的场合。
import re
pattern=re.compile('\w+') 将表达式编译为表达式对象
text='alpha.beta...gamma delta'
print(pattern.findall(text)) 正则表达式对象使用findall方法
结果为:
['alpha', 'beta', 'gamma', 'delta']
6.Match()对象主要方法有group()(返回一个或多个子模式内容),groups(返回一个包含匹配所有子模式内容的元组),groupdict()(返回包含匹配模式的所有命名子模式内容的字典)。
import re
#下面代码展示了group()方法的用法
a=re.match(r'(\w+)\s(\w+)','Isaac Newton,physicist')
print(a.group(0)) #返回整个子模式
#结果为:Isaac Newton
print(a.group(1)) #返回第一个子模式
#结果为:Isaac
print(a.group(2)) #返回第二个子模式
#结果为:Newtown
#下面代码展示了groups()方法的用法
print(a.groups())
#结果为:('Isaac', 'Newton')
groupdict()使用时要先给子模式命名,语法为:(?P<name>),注意P是大写,名字是生成的字典的键
import re
a=re.match(r'(?P<first>\w+)\s(?P<second>\w+)','Isaac Newton,physicist')
print(a.groupdict())
#结果为:{'first': 'Isaac', 'second': 'Newton'}
(三)、子模式
使用括号表示一个子模式,括号内的内容作为一个整体处理,例如‘(red)+’可以匹配redred,redredred等多个重复red的情况
pattern=compile('(\w+)') #括号()为子模式