常用的正则表达式大全

什么是正则表达式

正则表达式(regular expression)描述了一种字符串匹配的模式

        1、比如:检索一个串是否含有某种子串(检索)                

        2、比如:匹配的子串做替换(替换)     

        3、比如:从一个串中取出符合某个条件的子串(提取)

模式:一种特定的字符串模式,这个模式是通过一些特殊的符号组成的

功能

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

        ② 数据检索(数据检索、数据抓取) =>  爬虫功能

        ③ 数据隐藏(135****6235 王先生)

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

目的

用于校验, 匹配数据的, 判断数据是否符合 我们指定的 规则.

用法

1. 导包. import re

2. 正则匹配.

        result = re.match(正则表达式, 要校验的字符串, 额外功能:例如忽略大小写 多行模式等) 匹配的意思, 从左往右依次逐个匹配.

        result = re.search(正则表达式, 要校验的字符串, 额外功能:例如忽略大小写 多行模式等) 查找的意思, 任意的一段能匹配上即可.

        result = re.compile(pattern=正则表达式).sub('用来替换的内容', '要被替换的字符串')

3. 获取匹配结果. result.group() 获取匹配结果, 分组编号不写, 默认是: 0

规则如下

正则规则如下:
单个字符:
    .           代表: 任意一个字符,\n除外
    \.          代表: 1个普通的, 即取消.的特殊作用
    [abc]       代表:   a b c中的任意一个字符
    [^abc]       代表:  除了 a b c中的任意一个字符
    \d          代表: 任意的一个数字, 等价于: 0-9
    \D          代表: 非数字
    \w          代表: 非特殊字符(单词字符),a-z,A-Z,0-9,_(下划线),汉字
    \W          代表: 特殊字符,非字母,非数字,非汉字,非下划线
    \s          代表: 空白,即空格,tab键,\n等
    \S          代表: 非空白
多个字符:
    ^           代表: 开头
    $           代表: 结尾

    *           代表: 前面的内容 ,至少出现0次,至多出现无数次
    +           代表: 1次 或者 多次
    ?           代表: 0次 或者 1次
    {n}         代表: 恰好n次,多一次少一次都不行
    {n,}        代表: 至少n次
    {n,m}       代表: 至少n次,至多m次,包括 n和 m
分组:
    |           表示或者的意思 , 多组正则能匹配任意一组即可
    (ab)        表示分组 , 分组编号从1开始,0分组代表整个 正则表达式
    \num        表示引用哪个分组的内容,例如: \1 代表引用1组的内容
扩展:
    (?P<name>)
        起名字的, 给分组起名字.
    (?P=name)
        根据名字, 引用分组

示例:

正则表达式_单个字符

# 1.导包
import re

# 需求1:判断字符串是否 包含 it
# 2.正确匹配 , match 是按照字符串,从左往右逐个匹配的,但有一个匹配不上,理解错误
# result  = re.match('.*it.*','bb123itcast')

# 需求2:查找字符串汇总 以数字开头 ,后面任意字符    从左往右,逐段查找,任意一段匹配上就行
# 格式:search('正则表达式','要校验的字符串',flags)
# result = re.search('[0-9].*','city:1.beijingh,2.shanghai')
result = re.search('\d.*','city:1.beijingh,2.shanghai')

# 3.判断匹配结果
if result:
    # 匹配成功
    info = result.group()  # 从正则对象中,获取匹配到的内容
    print(f'匹配结果是:{info}')
else:
    # 匹配成功
    print('匹配失败')
# 三目运算符
print(f'匹配结果是:{result.group()}' if result else '匹配失败')

正则表达式_多个字符

# 1.导包
import re


# 2.正确匹配 , match 是按照字符串,从左往右逐个匹配的,但有一个匹配不上,理解错误
# 需求1:演示 * 的用法, 0次或多次
# result  = re.match('it.*','itabc1234')

# 需求2:演示 + 的用法 , 1次或多次
# result  = re.match('it.+','it1')

# 需求3:演示 ? 的用法 , 1次或 0 次
# result  = re.match('it.?','it')

# 需求4:演示 {n} 的用法 , 恰好n次
# result  = re.match('ita{3}','itaaa')

# 需求5:演示 {n,} 的用法 , 至少 n 次
# result  = re.match('ita{3,}','itaaa')

# 需求6:演示 {n,m} 的用法 , 至少 n 次,至多m次,包括 n和 m
result  = re.match('ita{3,5}','itaaa')


# 3.判断匹配结果
if result:
    # 匹配成功
    info = result.group()  # 从正则对象中,获取匹配到的内容
    print(f'匹配结果是:{info}')
else:
    # 匹配成功
    print('匹配失败')
# 三目运算符
print(f'匹配结果是:{result.group()}' if result else '匹配失败')

正则表达式_替换

# 需求3 :演示正则表达式,替换功能
# 1.创建字符串,包含一些要被替换的内容
old_str = "车主说:你的刹车片改换了啊,嘿嘿"

# 2.定义正则表达式规则
p = r'啊|啦|嘿嘿'

# 3.封装正则表达式(字符串),获取:正则对象
res = re.compile(pattern=p)  #  根据正则表达式,编译出:正则对象

# 4.具体的替换过程
result_str = res.sub('',old_str)

# 5.打印替换结果
print(f'处理后,内容为{result_str}')

正则表达式_开头和结尾

"""
校验正则表达式开头和结尾
正则规则:
    ^   以什么开头
    $   以什么结尾.
"""

# 1.导包
import re

# 2.校验字符串是否以数字开头
result = re.match('^\d+.*','123ABC')

# 校验以数字结尾
#result = re.match('.*\d$','123ABC1')

# 校验数字开头和结尾
#result = re.match('^\d.*\d$','123ABC1')

# 3.判断匹配结果
if result:
    # 匹配成功
    info = result.group()  # 从正则对象中,获取匹配到的内容
    print(f'匹配结果是:{info}')
else:
    # 匹配成功
    print('匹配失败')
# 三目运算符
print(f'匹配结果是:{result.group()}' if result else '匹配失败')

正则表达式_或者

# 1.导包
import re

# 2.校验邮箱
result = re.match('[a-zA-Z0-9_]{4,20}@(163|126|qq)\.(com|cn)','hello123@qq.com')

# 判断并打印
if result:
    info = result.group()
    print(f'匹配到:{info}')

    # 扩展:
    print(f'组0:{result.group(0)}')  # hello123@qq.com
    print(f'组1:{result.group(1)}')  # qq
    print(f'组2:{result.group(2)}')  # com
else:
    print('未匹配')

正则表达式_校验标签

"""
# 需求:匹配qq:10567 这样的内容,然后提取qq文字和10567

# 1.导包
import re

# 2,校验标签。num 表示引用哪组正则,在Python中,两个\ 表示\ ,所以不能写\1,而是:\\1
# result = re.match('<[a-ZA-Z1-6](1,4}>.*</[a-zA-Z1-6]{1,4}>','<html>hh</html>')
# result = re.match('<([a-zA-Z1-6]{1,4})>,*</\\1>','<htm>hh</html>')
# result = re.match(r'<([a-zA-Z1-6]{1,4)>,*</\1>','<html>hh</html>')   # r'' 取消转义

# 扩展提高(了解): 匹配 html>sh1>hh</h1></html>
# result = re.match(r'<([a-zA-Z1-6]{1,4})><([a-zA-Z1-6]{2})>.*</\2></\1>','<html><h1>hh</h1></html>')
result = re.match(r'<(?P<html>[a-zA-Z1-6]{1,4})><(?P<h>[a-zA-Z1-6]{2})>.*</(?P=h)></(?P=html)>', '<html><h1>hh</h1></html>')

# 3.判断并打印
if result:
    info = result.group()
    print(f'匹配到:{info}')

    # 扩展:
    # print(f'组0:{result.group(0)}')  # hello123@qq.com
    # print(f'组0:{result.group(1)}')  # qq
    # print(f'组0:{result.group(2)}')  # com
else:
    print('未匹配')

细节 

正则表达式并不是Python所特有的,在Java、PHP、Go以及JavaScript等语言中都是支持正则表达式的。

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值