简介:关于正则表达式的应用
基本元字符
预定义字符类
量词
贪婪量词和懒惰量词
贪婪量词:尽可能多的匹配字符(r'\d{5,8}',匹配的数字出现8个)
懒惰量词:尽可能少的匹配字符(r'\d{5,8}?',匹配的数字出现5个)
re中的重要函数
search()函数
规则:在输入的字符串中查找,返回第一个匹配的内容,
找到返回match对象
否则返回None
mathch函数
规则:在输入字符串开始处中查找匹配内容,
找到返回match对象
否则返回None
search()函数和mathch函数的对比
import re
rule = r'\w+@qq\.com'
text = 'My email is 3011077997@qq.com.'
#search
res = re.search(rule,text)
#match
res1 = re.match(rule,text)
#打印结果
print(res)
print(res1)
# <re.Match object; span=(12, 29), match='3011077997@qq.com'>
# None
# 如果将text改为3011077997@qq.com.
# 则都能匹配到
# 结果为
# <re.Match object; span=(0, 17), match='3011077997@qq.com'>
# <re.Match object; span=(0, 17), match='3011077997@qq.com'>
findall()函数
规则:在输入字符串中查找所有匹配内容,
成功,返回match列表对象
否则返回None
规则:在输入字符串中查找所有匹配内容,
成功,返回容纳match的可迭代对象,通过迭代对象每次可以返回一个match对象
否则返回None
findall()函数和finditer()函数
import re
rule = r'[Pp]ython'
text = 'This is a python or Python'
my_list = re.findall(rule,text)
my_list1 = re.finditer(rule,text)
print(my_list)
print(my_list1)
# ['python', 'Python']
# <callable_iterator object at 0x000002FAE8317A60> 得到的是一个对象
for m in my_list1:
print(m)
# <re.Match object; span=(10, 16), match='python'>
# <re.Match object; span=(20, 26), match='Python'>
字符串分割函数--split()
说明:按照匹配的子字符串进行字符串分割,返回字符串列表对象
用法:re.split(pattern,string,maxsplit =0, flags=0)
pattern: 正则表达式
string: 分割的字符串
maxsplit: 最大的分割次数,默认值为零:表示分割次数没有限制
flags: 编译标志
import re
rule = r'\d+'
text = 'AB12CD1234EF32G'
res = re.split(rule,text)
res1 = re.split(rule,text,maxsplit=2)
print(res)
print(res1)
# ['AB', 'CD', 'EF', 'G']
# ['AB', 'CD', 'EF32G']
字符串替换函数--sub()
说明:用于替换匹配的子字符串,返回值是替换后的字符串。
用法:re.sub(pattern , repl , string ,count =0 , flags=0)
pattern: 正则表达式
repl: 替换的字符串
string: 分割的字符串
count: 替换的最大数量,默认值为零:表示替换数量没有限制
flags: 编译标志
import re
rule = r'\d+'
text = 'AB12CD1234EF32G'
res = re.sub(rule,'',text)
res1 = re.sub(rule,'',text,count=1)
print(res)
print(res1)
# ABCDEFG
# ABCD1234EF32G
评论区