正则表达式

调用re模块,举两个简单的例子介绍re.match(),re.search(),re.findall(),re.sub()

import re

msg = 'aabbccddaa'
r = re.match('aa', msg)  # 从头匹配,不成功返回none,匹配即停止
print(r)
r = re.findall('aa', msg)  # 全局查找所有的匹配项
print(r)
r = re.search('bb', msg)  # 全局查找,匹配即停止
print(r)
print(r.span())  # 获取匹配位置
print(r.group())  # 获取匹配内容
msg = 'aabbccddaa'
r = re.sub(r'aa', 'zz', msg)  # 将字符串中的'aa'替换成'zz'
print(r)

<re.Match object; span=(0, 2), match='aa'>
['aa', 'aa']
<re.Match object; span=(2, 4), match='bb'>
(2, 4)
bb
zzbbccddzz

正则符号:

. 匹配除换行符以外的任意字符

^ 以...开头

$ 以..结尾

[] 表示范围,例如:[123abc]中的一种        [^]   取非

正则预定义:

\s 匹配空格 \S 非空格

\b 边界

\d 数字 \D 非数字

\w [0-9a-zA-Z_]   \W 非数字字母下划线

正则验证次数:

* 匹配0次或以上

+ 匹配1次或以上

? 匹配0次或1次

{m} 准确匹配m次

{m,} 匹配m次或以上

{m,n}   匹配m次或以上,n次或以下

使用 ()对正则进行分组

import re

email = '408389367@qq.com'
r = re.match(r'\w{1,20}@(qq|163|126)\.com$', email)  # 使用()对正则进行分组,|表示或者
print(r)

phone = '010-12345678'
r = re.match(r'(\d{3}|\d{4})-(\d{8})$', phone)
print(r.group(1))  # 通过group提取指定分组的值
print(r.group(2))

msg = '<html>hello</html>'
r = re.match(r'<(\w+)>(.+)</\1>', msg)  # 通过\数字的格式,在正则表达式中引用上一个组
print(r.group(2))

<re.Match object; span=(0, 16), match='408389367@qq.com'>
010
12345678
hello

通过给分组起名的方式使用分组

import re

# 起名的方式: (?P<名字>正则)        (?P=名字)
msg = '<html><h1>abc</h1></html>'
r = re.match(r'<(?P<name1>\w+)><(?P<name2>\w+)>(.+)</(?P=name2)></(?P=name1)>',msg)
print(r)

<re.Match object; span=(0, 25), match='<html><h1>abc</h1></html>'>

re.sub()与re.split函数

def func(temp):  # 定义一个函数,将正则匹配出来的项加1并返回
    num = temp.group()
    num1 = int(num) + 1
    return str(num1)


r = re.sub(r'\d+', func, '99,100,101')  # 将替换值设置为我们提前定义的函数
print(r)
r = re.split(r'[,.]', 'yang,lu.peng')  # 将正则表达式中匹配项当做分隔符,以列表形式将分割后的字符串保存
print(r)

100,101,102
['yang', 'lu', 'peng']

贪婪匹配/惰性匹配

默认为贪婪匹配,通过?将贪婪模式修改为惰性模式

import re

msg = 'abc123184113'
r = re.match(r'abc\d+', msg)
print(r)
r = re.match(r'abc\w+?', msg)
print(r)

<re.Match object; span=(0, 12), match='abc123184113'>
<re.Match object; span=(0, 4), match='abc1'>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值