首页 > 其他分享 >re模块和正则表达式

re模块和正则表达式

时间:2022-10-25 19:25:18浏览次数:50  
标签:字符 匹配 正则表达式 res re 模块 print

内置模块之re模块

re模块可以配合正则表达式使用。
在很多网页中,要求输入手机号、邮箱等,会在我们还没输完的情况下就提示我们在“请输入正确的手机号”“邮箱格式不正确”等信息,这用到了文字匹配的功能:

用普通的python代码实现是这样的:
while True:
    phone_num = input('请输入手机号')
    if len(phone_num) == 11:
        if phone_num.isdigit():
            if phone_num.startswith('13') or phone_num.startswith('15') or phone_num.startswith('18'):
                print('手机号输入正确')
            else:
                print('手机号开头不对')
        else:
            print('请输入纯数字')
    else:
        print('手机号位数不对')
        
 有点麻烦和繁琐

 如果使用 re模块配合正则表达式
 
  import re

 phone_num = input('请输入手机号')
 if re.match('^(13|15|18)[0-9]{9}$',phone_num):
    print('格式正确')
 else:
    print('格式错误')

正则表达式是一门独立的技术 ,所有编程语言都可以使用。

正则表达式

字符组

采用{ }括起来的一组字符

正则表达式 解释
[0123456789] 匹配0到9任意一个数字
[0-9] 匹配0到9任意一个数字
[a-z] 匹配26个小写英文字母
[A-Z] 匹配26个大写英文字母
[0-9a-zA-Z] 匹配数字或者小写字母或者大写字母

特殊符号

元字符

. 匹配除换行符以外的所有字符
\w 匹配字母或数字或下划线
\W 匹配非字母或数字或下划线
\d 匹配数字
\D 匹配非数字
^ 匹配字符串的开始
$ 匹配字符串的结尾
| 或者
() 匹配括号内的表达式,也表示一个组
[ ] 字符组

举例:

正则 待匹配字符串 结果 解释
\w 'ab-ab-a' ['a','b','a','b','a'] 匹配字符串中的所有字母\数字\下划线
\w\w 'ab-ab-a' ['ab,'ab'] 两个\w代表符合条件的两个字符连起来
[^a] 'ab-ab-a' ['b','-','b','-'] 一个[。。。]仅表示匹配一个字符

注意:区分^在[..]内外含义的不同,在外侧表示匹配字符串开头,在内侧表示取反。

量词

量词是用来搭配和正则表达式配合使用的

* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
正则 待匹配字符 匹配结果 说明
李.? 李杰和李莲英和李二棍子 李杰 李莲 李二 ?表示重复零次或一次,即只匹配"李"后面一个任意字符
李.* 李杰和李莲英和李二棍子 李杰和李莲英和李二棍子 *表示重复零次或多次,即匹配"李"后面0或多个任意字符
李.+ 李杰和李莲英和李二棍子 李杰和李莲英和李二棍子 +表示重复一次或多次,即只匹配"李"后面1个或多个任意字符
李.{1,2} 李杰和李莲英和李二棍子 李杰和 李莲英 李二棍 {1,2}匹配1到2次任意字符
[\d]+ 456bdha3 456 3 表示匹配任意个数字,匹配到2个结果

贪婪匹配与非贪婪匹配

所有的量词都遵循在其最大限度的情况下切片走字符串中的满足条件的字符组合。

正则 待匹配字符 匹配结果 说明
<.*> <script>...</script> <script>...</script> 默认为贪婪匹配模式,会匹配尽量长的字符串
<.*?> r'\d' <script> </script> 加上?为将贪婪匹配模式转为非贪婪匹配模式,会匹配尽量短的字符串

注意:所有的量词在没有使用?时,默认都是默认贪婪匹配

re模块之匹配所有-findall

import re

res = re.findall('e', 'leethon eat apple')  # 第一个参数给正则,第二个参数是待匹配字符串
print(res)  # ['e', 'e', 'e', 'e']
# 匹配到几个满足表达式'e'的,就返回几个,并组成列表 会找到所有符合的元素。并返回列表。

re模块之匹配所有成为迭代器 - finditer

res = re.finditer('正则表达式','待处理文本')
print(res)  # <callable_iterator object at 0x000001DA56E8A190>
print(list(res))  # [<re.Match object; span=(1, 2), match='e'>, <re.Match object; span=(2, 3), match='e'>]

# 匹配对象可以通过.group的方式拿到匹配的对象
#拿到个迭代器,每个结果都为匹配对象

re模块之匹配只匹配开头 - match

res = re.match('m', 'somnus')
print(res)  # None
# 只匹配开头,不满足则返回None,相当于把我们的正则表达式前加个^

re模块之分组优先

res = re.findall('www.(baidu|oldboy).com', 'www.oldboy.com')
print(res)  # ['oldboy']
# findall分组优先展示: 优先展示括号内正则表达式匹配到的内容

res = re.findall('www.(?:baidu|oldboy).com', 'www.oldboy.com')
print(res)  # ['www.oldboy.com']
# 在组的括号中加入(?:  ),就取消分组优先

标签:字符,匹配,正则表达式,res,re,模块,print
From: https://www.cnblogs.com/moongodnnn/p/16825974.html

相关文章

  • charles中Map、Rewrite、Breakpoints的区别
    Charles提供了Map功能、Rewrite功能、Breakpoints功能,都可以达到修改服务器返回内容的目的,这三者的差异是:MapMap功能适合长期的将某些请求重定向到另一个网络地址或本地......
  • 实验7:基于REST API的SDN北向应用实践
    实验7:基于RESTAPI的SDN北向应用实践一、实验目的能够编写程序调用OpenDaylightRESTAPI实现特定网络功能;能够编写程序调用RyuRESTAPI实现特定网络功能。二、实验......
  • 实验7:基于REST API的SDN北向应用实践
    一、实验目的能够编写程序调用OpenDaylightRESTAPI实现特定网络功能;能够编写程序调用RyuRESTAPI实现特定网络功能。二、实验环境下载虚拟机软件OracleVisualBo......
  • 正则表达式
    内容概要购物车程序设计正则表达式字符组量词贪婪匹配与非贪婪匹配转义符正则表达式实战re模块简易爬虫题目购物车程序设计1.项目框架搭建空函数功能字典......
  • wireshark 过滤语句集合
    wireshark抓包软件,日常排障必备。一般在linux、mac下抓包,命令行的。经常会用tcpdump来抓包而windows使用wireshark来抓包,免费,好用。通常安装好wireshark后,直接指定网卡......
  • 实验7:基于REST API的SDN北向应用实践
    一、实验目的能够编写程序调用OpenDaylightRESTAPI实现特定网络功能;能够编写程序调用RyuRESTAPI实现特定网络功能。二、实验环境下载虚拟机软件OracleVisualBo......
  • IfcVectorOrDirection
    IfcVectorOrDirection类型定义IfcVectorOrDirection允许在矢量函数的IfcVent和IfcDirection之间进行选择。 注:定义符合ISO/CD10303-42:1992此类型用于标识可以参与......
  • 正则表达式
    概念正则表达式可以用来匹配字符串,可以实现字符串的截取或者按规则替换和验证字符串的内容在js中创建正则表达式对象varreg=newRegExp("123");varreg=/123/;//......
  • 实验7:基于REST API的SDN北向应用实践
    实验目的能够编写程序调用OpenDaylightRESTAPI实现特定网络功能;能够编写程序调用RyuRESTAPI实现特定网络功能。实验要求(一)基本要求编写Python程序,调用OpenDayl......
  • HttpWebRequest请求
    1.获取token接口1privatestringgettoken()2{3//测试环境登陆用户4//stringusername="as";5//string......