Python自学之路---Day13

常用的三个方法

1.re.match(pattern, string, flags=0)

2.re.search(pattern, string, flags=0)

3.re.findall(pattern, string, flags=0)

原型 re.match(pattern, string, flags=0)
参数 pattern:匹配的正则表达式 string :要匹配的字符串 flags :标志位,用于控制正则表达式的匹配方式
功能 1.尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成果也会返回None 2.扫描整个字符串,并返回第一个匹配成功的字符串 3.扫描整个字符串,并返回所有匹配成果的结果列表

flags参数说明:

re.I 忽略大小写
re.L 做本地化识别
re.M 多行匹配,影响^和$
re.S 使.匹配包括换行符在内的所有字符
re.U 根据Unicode字符集解析字符,影响\w \W \b \B
re.X 使我们以更灵活的格式理解正则表达式
# re.match()
str1 = "www.baidu.com"
print(re.match("www", str1))
print(re.match("baidu", str1))
# 输出
<re.Match object; span=(0, 3), match='www'>
None
# re.search()
str1 = "www.baidu.com"
print(re.search("www", str1))
print(re.search("baidu", str1))
# 输出
<re.Match object; span=(0, 3), match='www'>
<re.Match object; span=(4, 9), match='baidu'>
# re.findall()
str1 = "www.baidu.com, www.baidu.com"
print(re.findall("www", str1))
print(re.findall("baidu", str1))
# 输出
['www', 'www']
['baidu', 'baidu']

匹配单个字符

. 匹配除换行符以外的任意字符
[a, b , c] 匹配 ‘a’ 或 ‘b’ 或 ‘c’
[^…] 匹配不在[ ]内的字符, 如[ ^abc]表示匹配除了’a’ ,‘b’, ‘c’ 这个三个字符以外的任意一个字符
[…-…] 匹配[从-到]的内容,如[1-9] 表示匹配数字1到9
\ 反斜杠后面跟 元字符 去除 元字符的特殊功能,反斜杠后面跟 普通字符 实现 特殊功能
\d 匹配所有数字,类似[0-9]
\D 匹配非数字字符
\w 匹配数字,字母和下划线,类似[0-9a-zA-Z_]
\W 匹配非数字,字母和下划线,类似[ ^0-9a-zA-Z_]
\s 匹配任意的空白符(空格,换行,换页,制表,回车),类似[ \f\n\r\t]
\S 匹配任意的非空白符(空格,换行,换页,制表,回车),类似[^ \f\n\r\t]
print(re.findall("goo.", "good man dool man goom"))
print(re.findall("[abc]", "www.baidu.com"))
print(re.findall("[^abc]", "www.baidu.com"))
print(re.findall("[0-9]", "25se26d1s5e"))
print(re.findall("[0123456789]", "25se26d1s5e"))
print(re.findall("\d", "25se26**d1s5e"))
print(re.findall("\D", "25se26**d1s5e"))
print(re.findall("\w", "25se26**d1s5e"))
print(re.findall("\W", "25se26**d1s5e"))
#输出
['good', 'goom']
['b', 'a', 'c']
['w', 'w', 'w', '.', 'i', 'd', 'u', '.', 'o', 'm']
['2', '5', '2', '6', '1', '5']
['2', '5', '2', '6', '1', '5']
['2', '5', '2', '6', '1', '5']
['s', 'e', 'd', 's', 'e']
['2', '5', 's', 'e', '2', '6', 'd', '1', 's', '5', 'e']
['*', '*']

边界匹配

^ 匹配字符串的开头,与[ ]里的^不是一个意思
$ 匹配字符串的结尾
\A 匹配字符串开头,和^的区别是它只匹配整个字符串的开头,即使在re.M模式下也不会匹配其他行的行首
\Z 匹配字符串结尾,和$的区别是它只匹配整个字符串的结尾,即使在re.M模式下也不会匹配其他行的结尾
\b 匹配\w作为边界的内容
\B 匹配非\w与\W之间的内容
print(re.search("^www", "www.baidu.com"))  	# ^
print(re.search("^www", "w.baidu.com"))
print(re.search("com$", "www.baidu.com")) # $
print(re.search("com$", "www.baidu.comm"))
print(re.search("ww\w", "www.baidu.com")) # \b
print(re.search("www\w", "www.baidu.com"))
print(re.search("www\W", "www.baidu.com")) # \B
print(re.search("www.\W", "www.baidu.com")) # 输出
<re.Match object; span=(0, 3), match='www'>
None
<re.Match object; span=(10, 13), match='com'>
None
<re.Match object; span=(0, 3), match='www'>
None
<re.Match object; span=(0, 4), match='www.'>
None

数量匹配

* 匹配前一个字符0次或无限次(贪婪)
+ 匹配前一个字符1次或无限次(贪婪)
匹配前一个字符0次或1次(非贪婪)
{m} 匹配前一个字符m次
{m,n} 匹配前一个字符m至n次。m,n可以省略,若省略m,则匹配0至n次;若省略n则匹配m至无限次(贪婪)
*?+?{m,n}? 可以使使其变为非贪婪匹配
print(re.findall("a*", "abaaa"))		# *
print(re.findall("a+", "abaaa")) # +
print(re.findall("a?", "abaaa")) # ?
print(re.search("a{2}", "abaaa")) # {m}
print(re.search("a{2,4}", "abaaa")) # {m,n}
print(re.search("a{2,4}?", "abaaa")) # {m,n}?
# 输出
['a', '', 'aaa', '']
['a', 'aaa']
['a', '', 'a', 'a', 'a', '']
<re.Match object; span=(2, 4), match='aa'>
<re.Match object; span=(2, 5), match='aaa'>
<re.Match object; span=(2, 4), match='aa'>

逻辑与分组

| 匹配左右表达式的任意一个,如果|没有被包括在()内,则它的范围是整个表达式
(...) 被括起来的表达式将作为一个分组,从表达式左边开始每遇到一个左括号,编号+1.分组表达式作为一个整体,后面可以接数量词。表达式中的|仅在该组中有效
(?P...) 指定组的别名
print(re.search("www.baidu.com|WWW.BAIDU.COM", "www.baidu.com"))	# |
print(re.search("www.baidu.com|WWW.BAIDU.COM", "WWW.BAIDU.COM"))
print(re.search("(w|W)ww.baidu.com", "www.baidu.com")) # ()
print(re.search("(w|W)ww.baidu.com", "Www.baidu.com"))
m = re.match(r"(?P<first>(\d{3})-(?P<last>\d{8}))", "010-52347654") # (?P<name>)
print(m.group(0)) # 使用序号获取对应组的信息,group(0)代表原始字符串
print(m.group(1))
print(m.group(2))
print(m.group("first"))
print(m.groups()) # 查看匹配的各组的情况
# 输出
<re.Match object; span=(0, 13), match='www.baidu.com'>
<re.Match object; span=(0, 13), match='WWW.BAIDU.COM'>
<re.Match object; span=(0, 13), match='www.baidu.com'>
<re.Match object; span=(0, 13), match='Www.baidu.com'>
010-52347654
010-52347654
010
010-52347654
('010-52347654', '010', '52347654')

编译正则表达式

编译:当使用正则表达式时,re模块会干两件事

​ 1.编译正则表达式,如果正则表达式本身不合法会报错

​ 2.用编译后的正则表达式去匹配对象

编译成正则对象,在调用是就会省去原来的正则表达式参数

pat = r"^1(([3578]\d)|(47))\d{8}$"		# 正则表达式
print(re.match(pat, "13600000000"))
re_telephone = re.compile(pat) # 编译
print(re_telephone.match("13600000000"))
# 输出
<re.Match object; span=(0, 11), match='13600000000'>
<re.Match object; span=(0, 11), match='13600000000'>

其他方法

re.split(pattern, string, maxsplit=0, flags=0)

该方法作用类似于字符串的split()方法,但是由于加入了正则表达式,所以更好用,更精确

str1 = "sunck         is a good man"
print(str1.split(" "))
print(re.split(r" +", str1))
# 输出
['sunck', '', '', '', '', '', '', '', '', 'is', 'a', 'good', 'man']
['sunck', 'is', 'a', 'good', 'man']

re.sub(pattern, repl, string, count=0, flags=0)

re.subn(pattern, repl, string, count=0, flags=0)

功能:在目标字符串中以正则表达式的规则匹配字符串,同时把他们替换成指定的字符串,默认替换次数为替换所有

区别:前者返回一个修改后的字符串,后者返回一个元组(修改后的字符串, 被替换的次数)

str3 = "www.baidu.com, www.sina.com, www.rnake.com"
print(re.sub(r"www", "ppp", str3))
print(type(re.sub(r"www", "ppp", str3)))
print(re.subn(r"www", "ppp", str3))
print(type(re.subn(r"www", "ppp", str3)))
# 输出
ppp.baidu.com, ppp.sina.com, ppp.rnake.com
<class 'str'>
('ppp.baidu.com, ppp.sina.com, ppp.rnake.com', 3)
<class 'tuple'>

Python自学之路---Day13的更多相关文章

  1. Python自学之路---Day01

    目录 Python自学之路---Day01 注释 单行注释 多行注释 print()函数 语法 参数 实例 input()函数 语法 参数 实例 查看Python的关键字 代码 变量与常量 变量 如何 ...

  2. Python自学之路

    2020年春节,受新型冠状病毒影响,整个春节假期,全国人民都在恐慌之中,为了避免大家上班相互传染,公司号召国家政策,开始上班日期延迟,在家呆的实在太无聊,突然感觉自己不能浪费这美好的时光,决定学习Py ...

  3. 我的Python自学之路-003 字符串的知识

    '''字符串是以引号或者单引号括起来的任意文本,例如"123","asdfjk",'adfa'引号或者单引号,只是一种表示方法,并不是字符串的一部分如果字符串本 ...

  4. python 自学之路-Day Two

    Day1补充部分 模块初识 模块就是由其他人写好的功能,在程序需要的时候进行导入,直接使用,也叫库. 库有标准库和第三方库,所谓标准库,就是不需要安装就可以直接使用的,自带的:第三方库,就是需要进行下 ...

  5. python 自学之路-Day one

    一.Python介绍 创始人吉多范罗苏姆(龟叔),脚本解释程序 应用领域广,数据分析.组件集成.网络服务.图像处理.数值计算和科学计算等. 主要应用领域: 云计算:OpenStack: WEB开发:经 ...

  6. Python自学之路——自定义简单装饰器

    看了微信公众号推送的一道面试题,发现了闭包的问题,学习时间短,从来没有遇到过这种问题,研究一下. Python函数作用域 global:全局作用域 local:函数内部作用域 enclosing:函数 ...

  7. ql的python学习之路-day13

    前言:本节主要学习模块 一.模块的定义 模块:本质是.py结尾的python文件(文件名:test.py,对应的模块是:test),用来从逻辑上组织python代码(变量.函数.类.逻辑,本质是实现一 ...

  8. 我的Python自学之路-002 字典的知识

    '''字典是python中唯一的验证类型,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算.根据计算的结果决定value的存储地址.所以字典是无序存储的.且key必 ...

  9. 我的Python自学之路-001 列表的知识

    #_date_:2020/9/11 '''列表和字典是python中用的最多的数据类型 假如要存储一个班级的人名,需要怎么做?有这么几种方法:1.定义很多个变量: name0 = 'wucaho' n ...

随机推荐

  1. 剑指offer 数组中重复的数

    在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为7的数组{ ...

  2. [Codeforces]1263D Secret Passwords

    题目 One unknown hacker wants to get the admin's password of AtForces testing system, to get problems ...

  3. java中的几种单例模式

    目前比较常见的有4种(DCL为懒汉模式的线程安全版本). 单例模式的实现一般需要满足以下条件: 1.构造方法私有化,实例属性私有化. 2.必须仅在类的内部完成实例的初始化过程. 3.提供公共静态方法, ...

  4. 关于重定向RedirectAttributes的用法

    刚才做项目,遇到了redirectAttributes使用的问题,上网找了找,看到一篇写的很不错的博客,解决我对于RedirectAttributes的困惑,也给大家推荐下. 原文链接:href=&q ...

  5. JAVA CookieUtil

    package com.itheima.shop.utils; import java.io.UnsupportedEncodingException; import java.net.URLDeco ...

  6. Problem I: Ingenious Lottery Tickets

    Problem I: Ingenious Lottery Tickets Your friend Superstitious Stanley is always getting himself int ...

  7. JuJu团队11月26号工作汇报

    JuJu团队11月26号工作汇报 JuJu   Scrum 团队成员 今日工作 剩余任务 困难 于达 对原始文本进行预处理, 并转换成可被julia读入的格式 完成预处理并用julia读入. 读入后按 ...

  8. php5.3不支持 ereg、ereg_replace等函数问题

    在php5.3环境下运行oscommerce,常常会出现Deprecated: Function ereg() is deprecated in...和Deprecated: Function ere ...

  9. 【转帖】Windows 10版本占比一览:v1903依然最稳定 占比52.6%

    Windows 10版本占比一览:v1903依然最稳定 占比52.6% https://os.51cto.com/art/202002/611452.htm 其实感觉现阶段的win10 与 2015年 ...

  10. HDU - 1698 Just a Hook (线段树---区间修改)

    题意:n个棍子,初始值全为1,给定Q个区间,分别赋值,问n个棍子的总值. 分析:lazy标记主要体现在update上. 当l <= L && R <= r时,该结点的子结点 ...