正则表达式(regex)是一些由字符和特殊符号组成的字符串,它们描述了模式的重复,因此正则表达式能按照某种模式匹配一系列有相似特征的字符串(能够匹配多个字符串)。
Python 通过标准库中的 re 模块来支持正则表达式。
搜索和匹配(模式匹配)的区别
在Python中有两种方法完成模式匹配:“搜索”(searching),即在字符串任意部分中搜索匹配的模式;而“匹配”(matching)是指判断一个字符串能否从起始处全部或者部分地匹配某个模式。
搜索通过search()方法实现,匹配通过调用match()方法实现。
正则表达式基础知识——特殊符号和字符(元字符)
正则表达式是包含文本和特殊字符的字符串,该字符串描述了可以识别某类字符串的模式。
正则表达式的强大之处在于引入特殊字符来定义字符集、匹配子组和重复模式。
正则表达式基础知识——特殊符号和字符(元字符)——正向前视断言
从当前匹配位置开始测试后面字符串是否匹配先行断言中的内容。
/[a-z]+(?=\d+)/匹配"abc100"
[a-z]+匹配字符”abc”,当前的匹配位置变成3。从该位置测试\d+是否成立,由于成功匹配到字符100,正则表达式正向断言成功,返回匹配字符串”abc”,不是"abc100".
正则表达式基础知识——特殊符号和字符(元字符)——后视断言
分为正向和负向。断言的正则表达式不要出现不固定长度量词,否则极有可能会出现死循环。匹配当前位置左边的字符,则返回真。如果后视断言出现在最左边,默认位置是从0开始,匹配一定会失败的,所以后视断言都是让后面的正则表达式先进行匹配,再回溯,直到匹配到为止。
"(?<=\w)\w+"匹配"abc100+="
/\w+/匹配字符:”abc100”,从该位置0开始检测左边是否匹配\w,匹配失败。
于是开始回溯,/\w+/从字符b开始匹配”bc100”,测试它左侧有字符”a”,反向断言正确。因此匹配到字符串“bc100”。
正则表达式基础知识——匹配任意单个字符.
.点操作符匹配除了换行符\n之外的任意字符——Python正则表达式有一个编译标记[S 或者 DOTALL],该标记能够推翻这个限制,使点号能够匹配换行符
正则表达式基础知识——起始或者结尾
如果要匹配字符串的开始位置,必须使用脱字符( ^)或者特殊字符\A (反斜线和大写字母 A)。
后者主要用于那些没有脱字符的键盘(例如,某些国际键盘)。同样,美元符号( $)或者\Z
将用于匹配字符串的末尾位置。
正则表达式基础知识——边界符
正则表达式基础知识——[]创建字符集
以前一直理解为匹配[]中的某个元素,其实正确的说法是方括号创建了一个字符集。
字符集的方法只适用于单字符的情况。
正则表达式基础知识——闭包操作符
星号操作符( *)将匹配其左边的正则表达式出现零次或者多次的情况(在计算机编程语言和编译原理中,该操作称为 Kleene 闭包)。
加号( +)操作符将匹配一次或者多次出现的正则表达式(也叫做正闭包操作符)
正则表达式基础知识——重载过很多次的问号?
匹配 0 次或1次
问号紧跟在闭合操作符的后面,它将直接要求正则表达式引擎匹配尽可能少的次数。
正则表达式基础知识——最少匹配
正则表达式引擎将试图“吸收”匹配该模式的尽可能多的字符——贪婪匹配。加了问号,如果可能,就在当前的正则表达式中尽可能少地匹配字符,留下尽可能多的字符给后面的模式(如果存在)。
正则表达式基础知识——圆括号
当使用正则表达式时,一对圆括号可以实现以下任意一个(或者两个)功能:
? 对正则表达式进行分组;
? 匹配子组。
正则表达式基础知识——圆括号——分组
原因:
当有两个不同的正则表达式而且想用它们来比较同一个字符串时;
对正则表达式进行分组可以在整个正则表达式中使用重复操作符(而不是一个单独的字符或者字符集)。
正则表达式基础知识——圆括号——匹配子组
匹配模式的子字符串可以保存起来供后续使用。
作用:要提取所匹配的模式
正则表达式基础知识——扩展表示法
尽管扩展表示法使用了圆括号,但是只有( ?P<name>)表述一个分组匹配。其他的都没有创建一个分组。
本文暂时没有评论,来添加一个吧(●'◡'●)