栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python笔记40 正则表达式 re模块

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python笔记40 正则表达式 re模块


正则表达式: 处理字符串作用,字符串校验等,效率高,网络爬虫等
主要用来描述规则,功能匹配,提取替换等



# 通过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'<(.+)><(.+)>(.+)',htmlTag)
print(res.group(1))
print(res.group(2))
print(res.group(3))

# 分组 别名的使用(?P<名字>)
# 如何使用别名 (?P=引用的名字)
data = 'www.baidu.com'
res = re.match(r'<(?Pw*)><(?Pw*)>.*',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)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/338925.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号