py11-python之正则-re

本文介绍了正则表达式的概念,以及在Python中使用re模块的match、search和findall方法进行字符串匹配。重点讲解了元字符的匹配规则,如.、[]、*、+、?等,并通过实例演示了如何创建和应用规则来验证账号、QQ号和邮箱地址格式。
摘要由CSDN通过智能技术生成

一、正则表达式

1、定义:

    正则表达式,又称规则表达式(Regular Expression),是使用单个字符串来描述、匹配某个句法规则的字符串,常被用来检索、替换那些符合某个模式(规则)的文本
    简单来说,正则表达式就是使用: 字符串定义规则,并通过规则去验证字符串是否匹配
比如通过正则规则:(^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$),即可匹配一个字符由是否是标准邮箱格式

2、正则的三个基础方法:

Python正则表达式使用re模块,并基于re模块中三个基础方法来做正则匹配,分别是:match、search、findall
(1)re.match(匹配规则,被匹配字符串):从被匹配字符串开头进行匹配,匹配成功返回匹配对象(包含匹配的信息),匹配不成功返回空

s='python haha python hehe python yoyo'
result = re.match('python',s)
print(result)  # 返回:<re.Match object; span=(0,6),match='python'>
print(result.span())  # 返回:(0, 6)
print(result.group())  # 返回:python
s ='1python hahapython hehepython yoyo'
result = re.match('python', s)
print(result)  # 返回:None

(2)search(匹配规则,被匹配字符串):搜索整个字符串,找出匹配的。从前向后,找到第一个后,就停止,不会继续向后
若整个字符串都找不到,返回None

s ='1python666haha666python666'
result = re.search('python', s)
print(result)   # <re.Match object;span=(1,7),match='python'>
print(result.span())  # (1,7)
print(result.group())  # python

(3)findall(匹配规则,被匹配字符串):匹配整个字符串,找出全部匹配项
找不到返回空list:[]

s ='1python666haha666python666'
result = re.findall('python', s)
print(result)  # ['python','python']

3、元字符匹配

(3-1)单字符匹配:
. :匹配任意1个字符(除了\n),.匹配点本身
[] :匹配[]中列举的字符,[]内可以写:[a-zA-Z0-9]这三种范围组合或指定单个字符如[aceDFG135]
\d :匹配数字,即0-9
\D :匹配非数字
\s :匹配空白,即空格、tab键
\S :匹配非空白
\w :匹配单词字符,即a-z、A-Z、0-9、-
\W :匹配非单词字符
备注:字符串的r标记,表示当前字符串是原始字符串,即内部的转义字符无效而是普通字符
小例子:

s='12@asd'
# 1.找出全部数字: 
re.findall(r'\d', s)
# 2.找出特殊字符:
re.findall(r'\W', s)
# 3.找出全部英文字母:
re.findall(r'[a-zA-Z]', s)

(3-2)数量匹配
* :匹配前一个规则的字符出现0至无数次
+ :匹配前一个规则的字符出现1至无数次
? :匹配前一个规则的字符出现0次或1次
{m} :匹配前一个规则的字符出现m次
{m,} :匹配前一个规则的字符出现最少m次
{m,n} :匹配前一个规则的字符出现m到n次

(3-3)边界匹配
^ :匹配字符串开头
$ :匹配字符串结尾
\b :匹配一个单词的边界
\B :匹配非单词边界

(3-4)分组匹配
| :匹配左右任意一个表达式
() :将括号中字符作为一个分组

4、小例子

1)匹配账号,只能由字母和数字组成,长度限制6到10位

r = '^[0-9a-zA-Z]{6,10}$'
s ='123456_'
print(re.findall(r,s))

(2)匹配qq号,要求纯数字,长度5-11,第一位不为0

r = r'^[1-9][0-9][4,10]$'
s = '123453678'
print(re.findall(r,s))

(3)匹配邮箱地址,只允许q9、163、gmail这三种邮箱地址

r = r'(^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$)'
s = 'a.b.c.d.e.f.g@126.com.a.z.c.d.e'
print(re.match(r,s))
  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值