第十二章 Python正则表达式

系列文章目录
第一章 Python 基础知识
第二章 python 字符串处理
第三章 python 数据类型
第四章 python 运算符与流程控制
第五章 python 文件操作
第六章 python 函数
第七章 python 常用内建函数
第八章 python 类(面向对象编程)
第九章 python 异常处理
第十章 python 自定义模块及导入方法
第十一章 python 常用标准库
第十二章 python 正则表达式
第十三章 python 操作数据库



脑图

正则
什么是正则表达式?
re 标准库
re.compile
re.match
代表字符
. 任意一个字符--除了\n
[] 匹配中括号的任意一个字符
\d 匹配一个数字
\D 匹配非数字
\s 匹配空格 tab键
\S 匹配非空白
\w 匹配非特殊字符,既a-z\A-Z\0-9\_\汉字
\W 匹配特殊字符,既非字母\非数字\非汉字\非\_\
原始字符串
r 字符串里的特殊意义符号会自动加转义符
代表数量
* 0次或者多次
+ 1次或者多次
? 0次或者1次
{n} n次
{n,} 至少n次
{n,m} n次到m次
代表边界
^ 以什么开头
$ 以什么结尾
\b 匹配单词边界
\B 匹配非单词边界
代表分组
| 任意两边任意一个正则表达式
re 匹配小括号中正则表达式,将括号作为一个分组
\'n'回车符 ----- n是数字,从1开始编号,表示引用第n个分组匹配的内容
(?P<'name<'re) 分组别名
(?P=name) 引用分组别名
贪婪模式和非贪婪模式
re 标准库其他方法
search 搜索
findall 查询全部
split 分割
sub 替换
标志位
re.I 忽略大小写
re.S 匹配换号

正则表达式介绍

正则表达式是对字符串操作的一种逻辑方式,就是用预先定义好的一些特定字符及这些特定字符的组合,组成一个规则字符串,这个规则字符串就是表达对字符串的逻辑,给定一个正则表达式和另一个字符串,通过正则表达式从字符串得到我们想要的部分

re标准库基本使用

方法描述
re.compile(pattern,flags=0)把正则表达式编译成一个对象
re.match(pattern,string,flags=0)匹配字符串开始,如果不匹配返回None
re.search(pattern,string,maxsplit=0,flags=0)扫描字符串寻找匹配,如果符合返回一个匹配对象并终止匹配,否则返回None
re.split(pattern,string,maxsplit=0,flags=0)以匹配模式作为分隔符,切分字符串为列表
re.findall(pattern,string,flags=0)以列表形式返回所有匹配的字符串
re.finditer(pattern,string,flags=0)以迭代器形式返回所有匹配的字符串
re.sub(pattern,repl,string,count=0,flags=0)字符串替换,repl替代匹配的字符串,repl可以是一个函数

语法:re.compile(pattern,flags=0)

pattern指的是正则表达式。flags是标志位的修饰符,用于控制表达式匹配模式

实例1import re
s = "this is test string"
pattern = re.compile('this')
result = pattern.match(s)
# 匹配成功后,result对象会增加一个group()方法,可以用它来获取匹配结果
print(result.group())

语法:re.match(pattern,flags=0)

import re
s = "this is test string"
result = re.match('this',s)
print(result.group())

代表字符

字符描述
.任意单个字符(除了\n)
[]匹配中括号中的任意1个字符,并且特殊字符写在[]会被当成普通字符来匹配
[.-.]匹配中括号中范围内的任意1个字符,例如[a-z],[0-9]
[^]匹配[^字符]之外的任意一个字符
\d匹配数字,等效[0-9]
\D匹配非数字字符,等效[^0-9]
\s匹配单个空白字符(空格、Tab键),等效[\t\n\r\f\v]
\S匹配空白字符之外的所有字符,等效[^\t\n\r\f\v]
\w匹配字符、数字、下划线,等效[a-zA-Z0-9]
\W与\w相反,等效[……a-zA-Z0-9]
import re
s = "hello world"
result1 = re.match('.',s)
result2 = re.match('..',s)
result3 = re.match('...',s)
result4 = re.match('hell.',s)
print(result1)
print(result2)
print(result3)
print(result4)
result5 = re.match('[a-z]',s)
print(result5)
result6 = re.match('[^a-z]',s)
print(result6)
n = '123 4567777777'
result = re.match('\d\d\d\s',n)
print(result)

n = 'aBc123'
result = re.match('\w\w\w\w\w\w',n)
print(result)

在这里插入图片描述

原始字符r

“r” 表示原始字符串,有了它,字符串里的特殊意义符号就会自动加转义符

实例:
import re
s = "123\\abc"
result = re.match("123\\abc",s)
result1 = re.match("123\\\\abc",s)
result2 = re.match(r"123\\abc",s)
print(result)
print(result1)
print(result2)

在这里插入图片描述

代表数量

代表数量前方需要一个表达式,只是数量会报错
例如:
import re
s = “hello world”
result = re.match(‘*’,s)
print(result)
是会报错的

字符描述
*匹配前面的子表达式0次或多次(无限次)
+匹配前面的子表达式1次或多次
匹配前面的子表达式0次或1次
{n}匹配花括号前面字符n个字符
{n,}匹配花括号前面字符至少n个字符
{n,m}匹配花括号前面字符至少n个字符,最多m个字符
import re
s = "hello world"
result = re.match("hel*o",s)   # 匹配所有
result1 = re.match("hel+o",s)  # 匹配前1个字符一次或多次
result2 = re.match("hello?",s) # 匹配前1个字符一次,如果两次无效
result3 = re.match(".{5}",s)
result4 = re.match(".{3,8}",s)
print(result)
print(result1)
print(result2)
print(result3)
print(result4)
n = "17600000993"
result5 = re.match(".{11}",n)
# result5 = re.match("\d{11}",n)
if result5:
    print("这是一个11位的手机号")
else:
    print("这不是一个手机号")

在这里插入图片描述

代表边界

字符描述
^匹配以什么开头
$匹配以什么结尾
\b匹配单词边界
\B匹配非单词边界
import re
email = "wangzq@163.com"
result = re.match("^\w+@\d+\.\w+",email)
result1 = re.match("^\w+@[0-9]+\.[a-z]+$",email)
print(result)
print(result1)

在这里插入图片描述

代表分组、贪婪、其他方法

字符描述
匹配竖杠两边的任意一个正则表达式
(re)匹配小括号中正则表达式
使用\n反向引用,n是数字,从1开始编号,表示引用第n个分组匹配的内容
(?Pre)分组别名,name是表示分组名称
(?P=name)引用分组别名
import re
s = "<h1>wangzq@163.com</h1>"
result = re.match(r"<(\w+[0-9])>.*</(\1)>",s) # (re)用法
print(result)

在这里插入图片描述

import re
s = "hello world"
result = re.match("(?P<h>\w+) (?P<w>\w+)",s)
print(result)
print(result.group())
print(result.group(1))
print(result.group(2))
print(result.group(1,2))
print(result.group("h"))
print(result.group("w"))

在这里插入图片描述

贪婪和非贪婪匹配

贪婪模式:尽可能最多匹配
非贪婪模式:尽可能最少匹配,一般在量词(*、+)后面加个?问号就是非贪婪模式

import re
s = "hello 66666666"
result = re.match("hello 6+",s) # 贪婪匹配
print(result)

result = re.match("hello 6+?",s) # 非贪婪匹配
print(result)

s = "我今年30岁"
result = re.match("\w+",s) # 贪婪匹配
print(result)
result = re.match("\w+?(\d+)(\w+)",s) # 非贪婪匹配
print(result.group())
print(result.group(1))
print(result.group(2))

在这里插入图片描述

其他方法

类别描述
re.search(pattern,string,flags=0)扫描字符串寻找匹配,如果符合返回一个匹配对象并终止屁屁额,否则返回None
re.split(pattern,string,maxsplit=0,flags=0)以匹配模式作为分隔符,切分字符串为列表
re.findall(pattern,string,flags=0)以列表形式返回所有匹配的字符串
re.finditer(pattern,string,flags=0)以迭代器形式返回所有匹配的字符串
re.sub(pattern,repl,sting,count=0,flags=0)字符串替换,repl替换匹配的字符串,repl可以是一个函数
import re
s = "我今年30岁,身高175cm"
result = re.search("\d+",s)
print('search:',result.group())
result = re.split("\d+",s)
print('split:',result)
print('split:',result[0])
result = re.findall("\d+",s)
print('findall:',result)
result = re.finditer("\d+",s)
print('finditer:',result)
result = re.sub("30","40",s)
print('sub:',result)

在这里插入图片描述

标志位

字符描述
re.I/re.lGNORECASE忽略大小写
re.S/re.DOTAIL匹配所有字符,包括换行符\n,如果没有这个标志将匹配除了换行符
import re
M = "hello world"
RR = re.match("Hello",M,re.I)
print(RR)
print("=============")
s = """hello
world
"""
result = re.match("hello.*",s,re.S)
print(result)
print(result.group())

在这里插入图片描述


总结

以上就是今天学习的内容,本文仅仅简单学习了python的正则表达式(代表字符、代表数量、代表边界等)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

XMYX-0

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

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

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

打赏作者

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

抵扣说明:

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

余额充值