Python正则表达式 组 正向断言 反向断言

正则表达式

re.match函数

re.search方法

re.match与re.search的区别

检索和替换

re.compile 函数

findall

re.finditer

正则表达式实例

字符匹配

字符类

特殊字符类

 断言

1. 正预测先行断言:(?=exp)

2. 正回顾后发断言:(?<=exp)

3. 负预测先行断言:(?!exp)

4. 负回顾后发断言:(?

assert语句但它遇到一个断言语句,Python评估计算之后的表达式,希望是true。如果是表达式为false,Python触发AssertionError异常,其语法是:

Python提供的标准异常如下列表:

断言与异常区别


学习正则表达式最有效的工具网站https://regex101.com/

正则表达式

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。

re.match函数

re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 none。

函数语法:re.match(pattern, string, flags=0)
pattern 匹配的正则表达式
string 要匹配的字符串。
flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志

re.search方法

re.search 扫描整个字符串并返回第一个成功的匹配。

函数语法:re.search(pattern, string, flags=0)

pattern 匹配的正则表达式
string 要匹配的字符串。
flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志

re.match与re.search的区别

re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

检索和替换

Python 的 re 模块提供了re.sub用于替换字符串中的匹配项。

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

Python正则表达式 组 正向断言 反向断言_第1张图片

re.compile 函数

compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。

语法格式为:

re.compile(pattern[, flags])

参数:

  • pattern : 一个字符串形式的正则表达式

  • flags : 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:

    1. re.I 忽略大小写
    2. re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
    3. re.M 多行模式
    4. re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
    5. re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
    6. re.X 为了增加可读性,忽略空格和 # 后面的注释

findall

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。

注意: match 和 search 是匹配一次 findall 匹配所有。

语法格式为:

findall(string[, pos[, endpos]])

参数:

  • string : 待匹配的字符串。
  • pos : 可选参数,指定字符串的起始位置,默认为 0。
  • endpos : 可选参数,指定字符串的结束位置,默认为字符串的长度。

re.finditer

和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

re.finditer(pattern, string, flags=0)

参数:

参数 描述
pattern 匹配的正则表达式
string 要匹配的字符串。
flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志

正则表达式实例

字符匹配

实例 描述
python 匹配 "python".

字符类

实例 描述
[Pp]ython 匹配 "Python" 或 "python"
rub[ye] 匹配 "ruby" 或 "rube"
[aeiou] 匹配中括号内的任意一个字母
[0-9] 匹配任何数字。类似于 [0123456789]
[a-z] 匹配任何小写字母
[A-Z] 匹配任何大写字母
[a-zA-Z0-9] 匹配任何字母及数字
[^aeiou] 除了aeiou字母以外的所有字符
[^0-9] 匹配除了数字外的字符

特殊字符类

实例 描述
. 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。
\d 匹配一个数字字符。等价于 [0-9]。
\D 匹配一个非数字字符。等价于 [^0-9]。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
\W 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。

Python正则表达式 组 正向断言 反向断言_第2张图片

 Python正则表达式 组 正向断言 反向断言_第3张图片

 Python正则表达式 组 正向断言 反向断言_第4张图片

 Python正则表达式 组 正向断言 反向断言_第5张图片

史上最全正则表达式https://www.cnblogs.com/fozero/p/7868687.html

 断言

1. 正预测先行断言:(?=exp)

匹配一个位置(但结果不包含此位置)之前的文本内容,这个位置满足正则exp,举例:匹配出字符串s中以ing结尾的单词的前半部分:

2. 正回顾后发断言:(?<=exp)

匹配一个位置(但结果不包含此位置)之后的文本,这个位置满足正则exp,举例:匹配出字符串s中以do开头的单词的后半部分:

3. 负预测先行断言:(?!exp)

匹配一个位置(但结果不包含此位置)之前的文本,此位置不能满足正则exp,举例:匹配出字符串s中不以ing结尾的单词的前半部分:

4. 负回顾后发断言:(?

匹配一个位置(但结果不包含此位置)之后的文本,这个位置不能满足正则exp,举例:匹配字符串s中不以do开头的单词:

assert语句
但它遇到一个断言语句,Python评估计算之后的表达式,希望是true。如果是表达式为false,Python触发AssertionError异常,其语法是:

assert Expression[, Arguments]

Python提供的标准异常如下列表:

异常名称 描述
Exception 所有异常的基类
StopIteration 当一个迭代器的next()方法不能指向任何对象时引发
SystemExit 由sys.exit()函数引发
StandardError 除了StopIteration异常和SystemExit,所有内置异常的基类
ArithmeticError 数值计算所发生的所有异常的基类
OverflowError 当数字类型计算超过最高限额引发
FloatingPointError 当一个浮点运算失败时触发
ZeroDivisonError 当除运算或模零在所有数值类型运算时引发
AssertionError 断言语句失败的情况下引发
AttributeError 属性引用或赋值失败的情况下引发
EOFError 当从 raw_input() 与 input() 函数输入,到达文件末尾时触发
ImportError 当一个 import 语句失败时触发
KeyboardInterrupt 当用户中断程序执行,通常是通过按 Ctrl+c 引发
LookupError 所有查找错误基类
IndexError、KeyError 当在一个序列中没有找到一个索引时引发;当指定的键没有在字典中找到引发
NameError 当在局部或全局命名空间中找不到的标识引发
UnboundLocalError 试图访问在函数或方法的局部变量时引发,但没有值分配给它
EnvironmentError Python环境之外发生的所有异常的基类。
IOError 当一个输入/输出操作失败,如打印语句或 open()函数试图打开不存在的文件时引发;操作系统相关的错误时引发
SyntaxError、IndentationError 当在Python语法错误引发;没有正确指定缩进引发
SystemError、SystemExit 当解释器发现一个内部问题,但遇到此错误时,Python解释器不退出引发;当Python解释器不使用sys.exit()函数引发。如果代码没有被处理,解释器会退出
ValueError 在内置函数对于数据类型,参数的有效类型时引发,但是参数指定了无效值
RuntimeError 当生成的错误不属于任何类别时引发
NotImplementedError 当要在继承的类来实现,抽象方法实际上没有实现时引发此异常

断言与异常区别

断言能够帮助别人或未来的你理解代码,找出程序中逻辑不对的地方。一方面,断言会提醒你某个对象应该处于何种状态,另一方面,如果某个时候断言为假,会抛出 AssertionError 异常,很有可能终止程序。

你可能感兴趣的:(python,正则表达式,python)