python期末复习第四章字符串与正则表达式

一、字符串

(一)、字符串的常用方法

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+)')    #括号()为子模式

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值