正则表达式: 处理字符串作用,字符串校验等,效率高,网络爬虫等
主要用来描述规则,功能匹配,提取替换等
# 通过python中的r模块去学习并使用 正则表达式的基本知识点
import re
data = 'python is the best lanauage in the world'
result = re.match('python', data) # 精确匹配 只匹配什么什么来开头,只从字符串起始位置匹配
print(type(result)) # 返回
print(result.group())
# 通过python中的r模块去学习并使用 正则表达式的常用匹配规则
import re
data = 'python is the best lanauage in the world'
# result = re.match('python', data) # 精确匹配 只匹配什么什么来开头,只从字符串起始位置匹配
# print(type(result)) # 返回
# print(result.group())
res = re.match('P', data, re.I) # 第三个参数 I 表示忽略大小写
if res:
print('匹配成功。。。。')
print(res)
else:
print(res)
print('匹配失败')
print(res.group())
# group(num) 可以获取匹配的数据 如果有多个匹配的话 那么会议元组的形式
# 存放到group对象中 此时我们可以通过下标去获取
import re
data = 'python is the best lanauage in the world'
res = re.match('P', data, re.I) # 第三个参数 I 表示忽略大小写
res = re.match('(.*) is (.*?) .*',data, re.I|re.M )
if res:
print('匹配成功。。。。')
# print(res)
print(res.groups()) #group 输出
print(res.group(1))
print(res.group(2))
else:
print(res)
print('匹配失败')
re模块
# . 点的使用 import re #使用 re 模块 # data = 'a1aaa' # parrtern = '..' #匹配除了换行符之外的任意符号 # res = re.match(parrtern, data) # print(res.group())
import re #使用 re 模块
names = '李达','李明','小王','小李'
pattren = '李.'
for nam in names:
res = re.match(pattren, nam)
print(res.group())
import re #使用 re 模块
str1='hello'
res = re.match('[eh]',str1) #匹配原则在目标对象中找指定的,位于目标前面的对象想找到
print(res.group())
import re #使用 re 模块
# str1='hello'
pattern='[abc]' # 使用中括号括起来的内容 代表匹配集合内的任意一个字符
datas='a','b','c','d','wyw'
for data in datas:
result = re.match(pattern,data)
if result:
print('匹配成功%s'%result.group())
import re #使用 re 模块
# str1='hello'
pattern='[a-z]' # 使用中括号括起来的内容 代表匹配集合内的任意一个字符
datas='a','b','c','d','wyw'
for data in datas:
result = re.match(pattern,data)
if result:
print('匹配成功%s'%result.group())
import re
# d的用法 匹配数字 0-9
data='12345abcdef'
print(re.match('dd',data).group()) #都匹配第一项 写两个 即匹配两位
# D 匹配非数字
import re
data = 'e12345advc'
print(re.match('D',data).group())
# s 匹配一个空白字符或者tab键
import re
data=' helo'
print(re.match('ss',data).group())
# S 匹配非空白的字符 只要不是空白全部都可以匹配
import re
data='helo'
print(re.match('SS',data).group())
# w 匹配单词字符,即a-z A-Z 0-9 下划线
import re
data = '_1Athon jijdxiwhjidxj126226762'
print(re.match('wwww',data).group())
# W 匹配非单词的字符
import re
data = '@ Athon jijdxiwhjidxj126226762'
print(re.match('WWW',data).group())
# * 匹配前一个字符出现0次或无限次 即可有可无
import re
# res = re.match('[A-z][A-Z]*','AY')
res = re.match('[A-z][a-z]*', 'AnyeverydayIjappy') # 声明一个范围,只要在*前面的范围内
print(res.group())
# + 匹配前一个字符出现1次或无限次,至少匹配一次
import re
res = re.match('[a-zA-Z]+','YYYYYYYYYhxusbukskxjks') #大小写通配
print(res.group())
import re
# 告诉引擎匹配前导字符 0 次或者一次,事实上表示前导字符是可以选择的
result = re.match('[a-zA-Z]+[0-9]?','nameFunck_e')
print(result.group())
import re
# {min,max} 告诉引擎匹配前导字符min次到max次,min和max必须都是非负整数
# {min,} 只有min’代表max无限度
result = re.match('d{6}','123456677')
if result:
print('匹配成功{}'.format(result.group()))
import re
# 匹配邮箱demo 格式xxxxx@163.com
regexMail=re.match('[a-zA-Z0-9]{6,11}@163.com','dwdwswywsq@163.com') #6-10位
if regexMail:
print('匹配成功 {}'.format(regexMail.group()))
pass
常用的匹配规则-原生字符串
import re print(re.match(r'c:\a.txt','c:\a.txt').group()) #在正则前面加r字符串 表示原生字符串 python字符串就不转义了
import re
# ^ 匹配字符串开头
result = re.match('^P.*','Python is language')
if result:
print(result.group())
# import re
# print(re.match(r'c:\a.txt','c:\a.txt').group())
import re
# ^ 匹配字符串开头
result = re.match('^Pw{5}','Python is language') # 前导字符提取五位
if result:
print(result.group())
# | 竖线 匹配左右任意一个表达式
import re
string='wywsqpeng88'
rs=re.match('(wywsqpeng|wywsqpeng88)',string)
print(rs.group())
# 匹配电话号码 XXXX-123456789
# ^ 有两种含义 1:以XXXX开头 2.否定 取反
res=re.match('([0-9]*)-(d*)','0355-456213987')
print(res.group(0))
print(res.group(1))
print(res.group(2))
res=re.match('([^-]*)-(d*)','0355-456213987')
htmlTag='测试数据' res = re.match(r'<(.+)><(.+)>(.+)2>1>',htmlTag) print(res.group(1)) print(res.group(2)) print(res.group(3))
# 分组 别名的使用(?P<名字>) # 如何使用别名 (?P=引用的名字) data = 'www.baidu.com' res = re.match(r'<(?Pw*)><(?P w*)>.*(?P=name2)w*>(?P=name1)w*>',data) print(res.group())
complie re模块中的编译方法 可以把一个字符串编译成字节码 优点:我们在使用正则表达式进行match操作时 ,python会将字符串转换成 正则表达式对象 而如果使用complie 则只需要完成一次转换即可 以后在使用模式对象的话 无需重复转换
import re
reobj=re.compile('d{4}')
# 开始去使用模式对象reobj
rs=reobj.match('12354321') #与match等效
print(rs.group())
re.search 规则是只要在目标对象里找到就返回 规则:在全文中匹配一次,匹配到就返回
data='我爱伟大的祖国,'
re=re.search('祖国',data)
print(re.group())
data='我爱伟大的祖国,祖国是一个强大的国家'
re=re.search('祖国',data)
print(re)
print(re.group()) #匹配到的是第一个祖国
print(data[5])
print(data[7])
re.findall() 查询字符串中某个正则表达式全部的非重复出现的情况 返回的是一个符合 正则表达式的结果列表
data = '华为是华人的骄傲华侨'
rs=re.findall('华.',data)
print(rs)
推荐使用:
data = '华为是华人的骄傲华侨'
# rs=re.findall('华.',data)
# print(rs)
# 改造一下使用complie
reobj = re.compile('华.') #创建一次正则对象转换
print(reobj.search(data))
print(reobj.findall(data))
re.sub 实现目标的搜索和查找,并进行替换
re.subn 实现目标的搜索和查找,并进行替换,并返回被替换的数量, 以元组形式
dataS='Python是很受欢迎的编程语言' pattern = '[a-zA-Z]+' #字符集的范围 + 号代表前导字符模式出现1次以上 res=re.sub(pattern,'C#',dataS) print(res)
dataS='Python是很受欢迎的编程语言' pattern = '[a-zA-Z]+' #字符集的范围 + 号代表前导字符模式出现1次以上 res=re.sub(pattern,'C#',dataS) resn=re.subn(pattern,'C#',dataS) print(res) print(resn)
data='百度,腾讯,阿里,华为,360'
rs=re.split(',',data)
print(type(rs))
print(rs)



