正则表达式
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 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 none。
函数语法:re.match(pattern, string, flags=0)
pattern | 匹配的正则表达式 |
string | 要匹配的字符串。 |
flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志 |
re.search 扫描整个字符串并返回第一个成功的匹配。
函数语法:re.search(pattern, string, flags=0)
pattern | 匹配的正则表达式 |
string | 要匹配的字符串。 |
flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志 |
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
Python 的 re 模块提供了re.sub用于替换字符串中的匹配项。
语法:re.sub(pattern, repl, string, count=0, flags=0)
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
语法格式为:
re.compile(pattern[, flags])
参数:
pattern : 一个字符串形式的正则表达式
flags : 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。
注意: match 和 search 是匹配一次 findall 匹配所有。
语法格式为:
findall(string[, pos[, endpos]])
参数:
和 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_]'。 |
史上最全正则表达式https://www.cnblogs.com/fozero/p/7868687.html
(?=exp)
匹配一个位置(但结果不包含此位置)之前的文本内容,这个位置满足正则exp,举例:匹配出字符串s中以ing结尾的单词的前半部分:
(?<=exp)
匹配一个位置(但结果不包含此位置)之后的文本,这个位置满足正则exp,举例:匹配出字符串s中以do开头的单词的后半部分:
(?!exp)
匹配一个位置(但结果不包含此位置)之前的文本,此位置不能满足正则exp,举例:匹配出字符串s中不以ing结尾的单词的前半部分:
(?
匹配一个位置(但结果不包含此位置)之后的文本,这个位置不能满足正则exp,举例:匹配字符串s中不以do开头的单词:
assert Expression[, Arguments]
异常名称 | 描述 |
---|---|
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 异常,很有可能终止程序。