正则表达式

前言:
 正则表达式在敏感词过滤,手机、邮箱、密码验证以及爬虫方面使用比较广,在编程过程中可以使用网上已有的正则表达式。首先我们要能看懂正则表达式,才能合理的运用。
 附上:正则表达式在线测试

原子

原⼦:组成正则表达式的最⼩单位,任何字符都可以
原⼦含义原子含义
\d0-9中任何⼀个字符\D⾮0-9中的任何⼀个字符
\w0-9a-zA-Z的中任何⼀个字符 ]\W⾮0-9a-zA-Z_的中任何⼀个字符,也可以是中文
\s\n\r\t 空格\S⾮\n\r\t 空格中任何⼀个字符
.代表除\n之外的任何字符[]⾃⼰创建的原⼦表,[0-4]代表0-4中任何⼀个字符
\b词边界\B⾮词边界
\A字符串开始\z字符串的结尾
^⾏⾸;在原⼦表中表示排除[^]排除原⼦表中的字符
$⾏结尾-表示域,0-9就表示0 到9所有数字字符
[\u4e00-\u9fa5]匹配纯中⽂

量词

量词 量词能够增强原⼦的描述能⼒
量词含义量词含义
{}重复前⼀个原⼦的次数*重复0次或多次
{m}重复前⼀个原⼦的m次+⾄少出现1次
{m,n}重复前⼀个原⼦的最少m次,最多n次?出现0次或1次
{m,}重复前⼀个原⼦的最少m次*? +?匹配0次 匹配一次
()改变优先级x|y匹配x或者匹配y

模式修正符

修正符含义修正符含义
re.S使.匹配所有字符re.I不区分大小写
re.L本地化识别re.M多行匹配
re.U根据Unicode字符集解析字符,会影响\b、\B、\w、\W

正则常用方法

1、match(pattern,string,flags=0)

 功能:从字符串起始位置匹配⼀个模式,如果不是从起始位置匹配则返回None
 参数:patter 正则表达式
    string 要匹配的字符串
     flag 模式修正符
 返回值: 匹配成功返回⼀个Match object,失败返回None

print(re.match(r"1(3|5)\d{9}$","13567534535"))
# 结果:<_sre.SRE_Match object; span=(0, 11), match='13567534535'>

2、search(pattern, string, flags=0)

 功能:顺序扫描字符串,找到第⼀个匹配项结束(从左向右)
 参数: patter 正则表达式
    string 要匹配的字符串
    flag 模式修正符
 返回值:匹配成功,返回match object,否则返回None

res = re.search(r"hello","sfsdfsdfsddhellosdfffdhello")

3、group() groups() span()
 只有match 和search可以使用

# 无命名组
res = re.search(r'(\d{3,4})-(\d{7,8})',"010-2343534")
print(res.group(1))
print(res.group(2))
print(res.groups())

# 命名组  (?P<name>\w+)   ?P<组名>
res = re.search(r"show/(?P<name>\w+)","show/cuiccc")
print(res.group('name'))
print(res.group(1))
"""
结果:
	010
	2343534
	('010', '2343534')
	cuiccc
	cuiccc
"""

4、findall(pattern, string, flags=0)

 功能:扫描整个字符串,并返回结果列表
 参数:patter: 匹配的正则表达式
    string: 要匹配的字符串
    flags:模式修正符
 返回值:如果匹配成功返回⼀个列表,包含了所有匹配项,失败返回空列表

res = re.findall(r"xx","sdfsdxxfdgdxsxxdfsxx")
print(res)
# 结果:['xx', 'xx', 'xx']

5、split(pattern, string,maxsplit=0, flags=0)
 功能:⽤模式串做分隔符,将字符串分隔,返回分隔列表,如果模式加上括号,则分隔符会被保留
 参数:patter: 匹配的正则表达式
    string: 要匹配的字符串
    maxsplit 匹配次数,0不限制次数
    flags:模式修正符
 返回值:成功返回⼦串列表,否则返回空列表

# 从键盘上输入三个数求和
data = input("请输入三个整数,用逗号或空格做分隔符:")
data = re.split(r"[,,  ]+",data)
data = [int(value) for value in data]
print(sum(data))

6、sub(pattern, repl, string, count=0) subn类似
 功能:在⽬标字符串中以正则表达式的规则匹配字符串,再把他们替换成指定的字符串。可以指定替换的次数,如果不指定,替换所有的匹配字符串
 参数:
    pattern: 正则表达式(规则)
    repl: 指定的⽤来替换的字符串
    string: ⽬标字符串
    count: 最多替换次数
 区别:前者返回⼀个替换后的字符串,后者返回⼀个元组

# 千位数
str1 = "12345645768"
def replace(obj):
    pos = obj.span()[1]
    if pos % 3 == 0:
        return obj.group(0)+','
    else:
        return obj.group(0)

res = re.sub(r'\d',replace,str1[::-1])
print(res.strip(",")[::-1])
# 结果:12,345,645,768

7、compile(pattern, flags=0)
 功能:将正则表达式模式编译成正则表达式对象,其 match() 和 search() ⽅法可⽤于匹配
 参数:pattern 模式
    flags 模式修饰符

# 正则对象  只验证一次,后面直接调用
obj = re.compile(r"^\d{3,4}-\d{7,8}$")
print(obj.match("233-23345345"))
# 结果:<_sre.SRE_Match object; span=(0, 12), match='233-23345345'>
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dmy20210205

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值