正则表达式

一、正则表达式的概念

        正则表达式(regular expression)本质就是各种符号,通过这些符号,在大字符串中匹配、查找

指定字串,它适用于多种编程语言。

        正则表达式的功能:

        ① 数据验证(表单验证、如手机、邮箱、IP地址)

        ② 数据检索(数据检索、数据抓取) 

        ③ 数据隐藏(130****1234 某先生)

        ④ 数据过滤(论坛敏感关键词过滤)

        …

二、re模块

1.re模块三步走:

①导入re模块

②使用match方法进行匹配操作(match方法只能从头开始匹配,只能返回匹配成功的第一个)      

result = re.match(pattern正则表达式,string要匹配的字符串,fiags = 0)

③数据匹配成功,使用group方法来提取数据

# 1.导包
import re

# 需求: 已知一个字符串,my_str = '张三学习非常优秀是班级的学习委员'
my_str = '张三学习非常优秀是班级的学习委员'
print(my_str)
print('----------------------------------')
# 2.1使用match进行匹配
# TODO 注意: match只能从开头开始匹配,只能返回匹配成功第一个
result = re.match('张三', my_str)
print(result, type(result))
# 3.1提取匹配结果
if result:
    print(result.group())
else:
    print('匹配失败')
print('---------------------------------')

result = re.match('学习', my_str)
print(result, type(result))
# 3.2提取匹配结果
if result:
    print(result.group())
else:
    print('匹配失败')

2.其他方法(search,finfall)

search方法(可以全文搜索,但是只能返回匹配成功的第一个)

# 1.导包
import re
my_str = '张三学习很好是学习委员'
result = re.search('学习', my_str)
print(result, type(result))
if result:
    print(result.group())
else:
    print('匹配失败')

findall方法(可以搜索全文,并且可以返回所有匹配成功的结果)

# 1.导包
import re
my_str = '张三学习很好是学习委员'
result = re.findall('教育', my_str)
print(result, type(result))

三、正则表达式规则

导包和定义的函数后,后面直接使用即可

# 导包
import re


# 定义函数
def get_result(result):
    if result:
        print(f'匹配成功:{result.group()}')
    else:
        print('匹配失败!!!')

1.匹配单个字符

result = re.match('.........', 'Bg666_ 牛*')
get_result(result)
result = re.match('[A-Z][a-z][0-9][0-9][0-9][_]', 'Bg666_')
get_result(result)

2.匹配多个字符

result = re.match('.*', 'Bg666_ 牛*!@#$%^&*()-\t')
get_result(result)
result = re.match('https?://', 'http://')
get_result(result)
result = re.match('https?://', 'https://')
get_result(result)
result = re.match('[A-Za-z0-9_]*', 'Bg666_')
get_result(result)

3.匹配开头和结尾

import re

# 需求: 匹配银行取款密码,长度为6
result = re.findall('^\d{6}$', '123456')
print(result)

# 需求: 匹配网银密码,字母数字下划线混合,长度6-12
result = re.findall('^[a-zA-Z0-9_]{6,12}$', 'ABCDabcd_123')
print(result)

4.提取分组内容

(xy) : 把括号中的x和y作为一个整体分组

(x|y): 把括号中的x或者y作为一个分组

\组号 : 注意: 每个()分组后自动产生一个从1开始的编号,\编号就能获取到对应分组内容
import re
def get_result(result):
    if result:
        print(f'匹配成功:{result.group()}')
    else:
        print('匹配失败!!!')


# 注意: \本身有特殊含义,所以要多加一个转义符号\
# TODO 注意: 分组情况下match匹配成功,也是返回的所有内容
my_str = "<body><h1>一级标题</h1></body>"
result = re.match('<(body)><(h1)>.*</\\2></\\1>', my_str)
get_result(result)
print('----------------------------------------------------')
# TODO 注意: 1个分组情况下findall自动把本次匹配成功的内容放到列表中返回
result = re.findall('<(body)><h1>.*</h1></\\1>', my_str)
print(result)
print('----------------------------------------------------')
# TODO 注意: 多个分组情况下findall自动把本次匹配成功的多个分组内容封装成元组再放到列表中返回
result = re.findall('<(body)><(h1)>.*</\\2></\\1>', my_str)
print(result)

5.正则修饰符

# 导包
import re


# 定义函数
def get_result(result):
    if result:
        print(f'匹配成功:{result.group()}')
    else:
        print('匹配失败!!!')


# 需求: re.I 忽略大小写比较验证码
result = re.match('AB12', 'ab12')
get_result(result)
result = re.match('AB12', 'ab12', re.I)
get_result(result)
print('---------------------------------')
# 需求: re.S 匹配换行符
result = re.match('.*', 'a\nb')
get_result(result)
result = re.match('.*', 'a\nb', re.S)
get_result(result)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值