史上最详细python正则表达式

文章目录

          • 什么是正则
          • re模块基本用法
            • re模块基本用法-search
            • re模块基本用法-match
            • re模块基本用法-raw
            • re模块基本用法-match对象
            • re模块基本用法-findall
            • re模块基本用法-finditer
            • re模块基本用法-sub
            • re模块基本用法-compile
          • 基本正则匹配
            • 基本正则匹配-区间 []
            • 基本正则匹配-或匹配 a|b
            • 基本正则匹配-取反 [^abc]
            • 基本正则匹配-任意字符(占位符)
            • 基本正则匹配-快捷方式
            • 基本正则匹配-开始与结束 ^, $
          • 正则重复
            • 正则重复-通配符:?,*,+
            • 基本正则匹配-贪婪与非贪婪模式
          • 正则分组
            • 正则分组-简单分组
            • 正则分组-命名分组:(?P规则)
            • 正则分组-引用分组
          • 正则标记
            • 正则标记-第三个参数
            • 基本正则匹配-内联标记
          • 正则断言
            • 正则表达式断言

什么是正则

正则的目的

  • 数据挖掘
    从一大堆文本中找到一小堆文本时。如,从文本是寻找email, ip, telephone等

  • 验证
    使用正则确认获得的数据是否是期望值。如,email、用户名是否合法等

  • 非必要时慎用正则,如果有更简单的方法匹配,可以不使用正则

  • 正则表达式的优缺点
    优点:提高工作效率、节省代码
    缺点:复杂,难于理解

re模块基本用法

官方文档

re模块基本用法-search
  • re.search
    接受一个正则表达式和字符串,并返回发现的第一个匹配
    如果完全没有找到匹配,re.search返回None

史上最详细python正则表达式_第1张图片

re模块基本用法-match

字符串头查找匹配项
接受一个正则表达式和字符串,从主串第一个字符开始匹配,并返回发现的第一个匹配
如果字符串开始不符合正则表达式,则匹配失败,re.match返回None
史上最详细python正则表达式_第2张图片

re模块基本用法-raw

r’sanle’ 中的r代表的是raw(原始字符串
原始字符串与正常字符串的区别是原始字符串不会将\字符解释成一个转义字符
正则表达式使用原始字符很常见且有用
史上最详细python正则表达式_第3张图片

re模块基本用法-match对象
  • match.group(default=0):返回匹配的字符串。
    • group是由于正则表达式可以分拆为多个只调出匹配子集的子组。
    • 0是默认参数,表示匹配的整个串,n 表示第n个分组
    史上最详细python正则表达式_第4张图片
  • match.start()
    start方法提供了原始字符串中匹配开始的索
    史上最详细python正则表达式_第5张图片
  • match.end()
    end方法提供了原始字符串中匹配开始的索引
    史上最详细python正则表达式_第6张图片
  • match.groups()
    groups返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
    史上最详细python正则表达式_第7张图片
re模块基本用法-findall

查找并返回匹配的字符串,返回一个列表
假如里面有分组,只会打印分组的内容,(?:xxx)取消分组
史上最详细python正则表达式_第8张图片

re模块基本用法-finditer

查找并返回匹配的字符串,返回一个迭代器
史上最详细python正则表达式_第9张图片

re模块基本用法-sub

re.sub(‘匹配正则’,‘替换内容’,‘string’)
将string中匹配的内容替换为新内容
史上最详细python正则表达式_第10张图片

re模块基本用法-compile
  • 编译正则:re.compile(‘匹配正则’)
   reg = re.compile(r'l+')
   result = reg.search(Zen)
   print(result, type(result))
  • 编译正则的特点
	• 复杂的正则可复用。
	• 使用编译正则更方便,省略了参数。
	• re模块缓存它即席编译的正则表达式,因此在大多数情况下,使用compile并没有很大的性能优势
基本正则匹配

最简单的正则表达式是那些仅包含简单的字母数字字符的表达式,复杂的正则可以实现强大的匹配

基本正则匹配-区间 []
  • 正则匹配区分大小写
    史上最详细python正则表达式_第11张图片
  • 匹配所有字母:[a-zA-Z]
  • 匹配所有字母及-:[a-zA-Z-]
基本正则匹配-或匹配 a|b

史上最详细python正则表达式_第12张图片

基本正则匹配-取反 [^abc]

匹配a+非小写字母
史上最详细python正则表达式_第13张图片

基本正则匹配-任意字符(占位符)
  • "."占位符
    匹配任何(除\n外)的单个字符,它仅仅只以出现在方括号字符组以外
    史上最详细python正则表达式_第14张图片
基本正则匹配-快捷方式

史上最详细python正则表达式_第15张图片

  • 匹配字母数字
    史上最详细python正则表达式_第16张图片
  • 匹配非字母数字
    史上最详细python正则表达式_第17张图片
基本正则匹配-开始与结束 ^, $
  • 匹配以python开头:^python
  • 匹配以python结尾:python$史上最详细python正则表达式_第18张图片
正则重复
正则重复-通配符:?,*,+

史上最详细python正则表达式_第19张图片

  • 通配符:“?”: 匹配指定的字符(组)出现0次或1次
    史上最详细python正则表达式_第20张图片
  • 通配符:“*”: 匹配指定的字符(组)出现任意多次
    史上最详细python正则表达式_第21张图片
  • 通配符:“+”:匹配指定的字符(组)出现1次以上
    史上最详细python正则表达式_第22张图片
  • 通配符:“{n, m}”: 匹配指定的字符(组)出现1次以上
基本正则匹配-贪婪与非贪婪模式

• 贪婪模式(.*): 匹配尽可能多的字符-默认模式
• 非贪婪模式(.*?): 正则 \d*?
• 匹配出

test1
test2

史上最详细python正则表达式_第23张图片

正则分组
正则分组-简单分组

当使用分组时,除了可以获得整个匹配,还能够获得选择每一个单独组,使用 () 进行分组

  • 简单分组
    史上最详细python正则表达式_第24张图片
    当使用分组时,除了可以获得整个匹配,还能够获得选择每一个单独组,使用 () 进行分组

  • 分组不匹配(?:规则): 表示将()仅用于组合字符串,不识别为分组

正则分组-命名分组:(?P规则)

史上最详细python正则表达式_第25张图片

正则分组-引用分组

使用()分用,用\0, \1, \2引用 (\0表示匹配的整个串)
史上最详细python正则表达式_第26张图片

正则标记
正则标记-第三个参数

史上最详细python正则表达式_第27张图片
史上最详细python正则表达式_第28张图片

基本正则匹配-内联标记

史上最详细python正则表达式_第29张图片
史上最详细python正则表达式_第30张图片
史上最详细python正则表达式_第31张图片

正则断言
正则表达式断言

正则表达式的断言分为:先行断言(lookahead)和后行断言(lookbehind)
正则表达式的先行断言和后行断言一共有4种形式:
n (?=pattern) 零宽正向先行断言(zero-width positive lookahead assertion)
n (?!pattern) 零宽负向先行断言(zero-width negative lookahead assertion)
n (?<=pattern) 零宽正向后行断言(zero-width positive lookbehind assertion)
n (?

  • 零宽
    • ^python
  • 正向、负向
    • 正向:匹配(?=pattern)/(?<=pattern)
    • 负向:不匹配(?!pattern)/(?
  • 先行、后行
    • 先行:向后匹配(?=pattern)/(?!pattern)
    • 后行:向前匹配(?<=pattern)/(?
  • 零宽正向先行断言:(?=pattern)
    • 代表字符串中的一个位置,紧接该位置之后的字符序列能够匹配pattern。
    • 匹配字符串re,后面能接gular(但不匹配宽度
    史上最详细python正则表达式_第32张图片
  • 零宽负向先行断言:(?!pattern)
    • 代表字符串中的一个位置,紧接该位置之后的字符序列不能匹配pattern。
    • 匹配字符串re,但是后面不能接gular
    史上最详细python正则表达式_第33张图片
  • 零宽正向后行断言:(?<=pattern)
    • 代表字符串中的一个位置,紧接该位置之前的字符序列能够匹配pattern。
    • 匹配gular,但前面必须是re
    史上最详细python正则表达式_第34张图片
  • 零宽负向后行断言 :(? • 代表字符串中的一个位置,紧接该位置之前的字符序列不能匹配pattern。
    • 匹配gular,但前面不能是re
    史上最详细python正则表达式_第35张图片

你可能感兴趣的:(python,python)