参考资料:
https://baijiahao.baidu.com/s?id=1607549773736200730&wfr=spider&for=pc这个人的阐述在我心中是非常生动的哦
“正则表达式,又称规则表达式通常被用来检索、替换那些符合某个模式(规则)的文本”,
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
目的:
1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);match
2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。search
正则表达式并不是Python独有的武器,但Python中的正则表达式最简单,最强大
在Python中使用正则表达式,需要导入金光闪闪的re模块
re - Support for regular expressions (RE)
一、先了解一下正则表达式的书写和规则
在用正则表达式实现匹配或搜索的时候,可以写出一个具体的字符串作为任务对象,当然这样我们就只能找到和目标一样的对象,所以需要制定一些规则实现更多的满足某一条件(正则表达式)的多种情况。
先放出来规则(模式),然后下面举几个例子就明白了:
模式字符串使用特殊的语法来表示一个正则表达式:
字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。
多数字母和数字前加一个反斜杠时会拥有不同的含义。
标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。
反斜杠本身需要使用反斜杠转义。
由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。模式元素(如 r'\t',等价于 '\\t')匹配相应的特殊字符。
下表列出了正则表达式模式语法中的特殊元素。如果你使用模式的同时提供了可选的标志参数,某些模式元素的含义会改变。
模式 | 描述 |
---|---|
^ | 匹配字符串的开头,即行首 |
$ | 匹配字符串的末尾,即行尾 |
. | 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。 |
[...] | 用来表示一组字符,匹配其中任意若干个,如果^是第一个字符,则标示的是一个补集。比如[0-9]表示所有的数字,[^0-9]表示除了数字外的字符 |
* | 用于将前面的模式匹配0次或多次(贪婪模式,即尽可能多的匹配) |
+ | 用于将前面的模式匹配0次或多次(贪婪模式) |
? | 用于将前面的模式匹配0次或1次(非贪婪模式)*?,+?,??即上面三种特殊字符的非贪婪模式(尽可能少的匹配) |
{ n} | 用于将前面的模式精确匹配n次,如, o{2} 不能匹配 "Bob" 中的 "o",但是能匹配 "food" 中的两个 o。 |
{ n,} | 用于将前面的模式匹配 n 次。例如, o{2,} 不能匹配"Bob"中的"o",但能匹配 "foooood"中的所有 o。"o{1,}" 等价于 "o+"。"o{0,}" 则等价于 "o*"。 |
{ n, m} | 用于将前面的模式匹配m次到n次(贪婪模式),即最小匹配m次,最大匹配n次。 |
a| b | 匹配a或b |
() | 用于匹配括号中的模式,可以在字符串中检索或匹配我们所需要的内容 |
在https://www.runoob.com/python/python-reg-expressions.html里还有其他的一些组合情况,这里没列出来
举几个例子:
[io]+,[io]表示匹配的字符可以是i或o,而后面跟着的+号表示可以对[io]匹配一次或多次。所以只要满足这一条件的字符串都是可以被匹配的。
[a-z],匹配任何小写字母
二、再来看re模块的一些函数
re.match函数
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
re.match(pattern, string, flags=0)
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串。 |
flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志 |