第十二章 Python正则表达式

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


文章目录

  • 脑图
  • 正则表达式介绍
  • re标准库基本使用
    • 语法:re.compile(pattern,flags=0)
    • 语法:re.match(pattern,flags=0)
  • 代表字符
  • 原始字符r
  • 代表数量
  • 代表边界
  • 代表分组、贪婪、其他方法
    • 贪婪和非贪婪匹配
    • 其他方法
    • 标志位
  • 总结


脑图

正则
什么是正则表达式?
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)

第十二章 Python正则表达式_第1张图片

原始字符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)

第十二章 Python正则表达式_第2张图片

代表数量

代表数量前方需要一个表达式,只是数量会报错
例如:
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("这不是一个手机号")

第十二章 Python正则表达式_第3张图片

代表边界

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

第十二章 Python正则表达式_第4张图片

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

字符 描述
匹配竖杠两边的任意一个正则表达式
(re) 匹配小括号中正则表达式
使用\n反向引用,n是数字,从1开始编号,表示引用第n个分组匹配的内容
(?Pre) 分组别名,name是表示分组名称
(?P=name) 引用分组别名
import re
s = "

[email protected]

"
result = re.match(r"<(\w+[0-9])>.*",s) # (re)用法 print(result)

第十二章 Python正则表达式_第5张图片

import re
s = "hello world"
result = re.match("(?P\w+) (?P\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"))

第十二章 Python正则表达式_第6张图片

贪婪和非贪婪匹配

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

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))

第十二章 Python正则表达式_第7张图片

其他方法

类别 描述
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)

第十二章 Python正则表达式_第8张图片

标志位

字符 描述
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正则表达式_第9张图片


总结

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

你可能感兴趣的:(python3,基础知识,python,正则表达式,数据库)