初识正则表达式
能够按照某种模式匹配一系列具有相似特征的字符串。
比如说:垃圾邮箱拦截、邮件分类、验证手机号码等等功能。
正则表达式中的符号
*: 作用是代表前面的字符匹配0-n次。
?:作用是代表前面的字符出现0次或1次,即前面的字符可有可无。
+:作用是代表前面的字符匹配1-n次,至少出现一次。
-:作用是指出一个范围,如[0-9],[a-z],[A-Z]。
$: 在字符串中一般放在最后,代表的是$前面的字符必须匹配给出的字符串的结尾字符,如果不是的话,返回空。
^:表示字符串的起始位置,如果在[]中则表示非的意思。
以hello world为例: ^he. => hel (如果变成shello...则会匹配失败) ,.ld$ => rld (如果变成....world!则会匹配失败).
.:能够匹配除\n以外的任何一个字符。
{}:{N}表示匹配N次前面出现的正则表达式,例如:a{3}bc表示的就是aaabc,不能多也不能少,固定的;{N,M}表示最多M次,最少N次,最大化优先。
[]:表示能匹配中的任意单字符。
正则表达式中的特殊字符
\d : 匹配任意十进制数字。
\w : 匹配任何数字字母字符。
\s :匹配任何空格字符。
匹配特殊字符
如遇到. $ ^ 等特殊字符,我们就得用“\”进行转义。
正则表达式分组
利用 () 进行分组, 运用(? \w+) 指定组名
贪婪模式与非贪婪模式
贪婪模式是指在匹配成功的情况下,尽可能多的匹配。
非贪婪模式是指在匹配失败的情况下,尽可能少的匹配。
默认都是贪婪模式。
以 abacaxcd 为例子:
使用贪婪模式(也就是一般模式) ab.c => abacaxc
使用非贪婪模式 ab.?c => abac
由此例子可以看到 贪婪模式的* 取到了最大 3个, 而非贪婪模式的*取到了最小0个。
正则的进阶
re 模块
re.compile(pattern, flag = 0)
返回正则表达式对象 (将pattern 转化为 一个正则表达式)
正则表达式一般用 r 开头
例如:
re.compile(r'hello',re.I)
这个是忽略大小写的字符串匹配,还有其他的比如说:
re.M 用^ 和 $ 来作为开头和结尾。 re.S "."能匹配所有的字符。
re.match(pattern, string, flags=0)
从起始位置匹配一个模式,如果起始位置开始没有就返回None
findall(string[, pos[, endpos]])
查找字符串中所有(非重复)出现的正则表达式模式,返回一个匹配列表。
re.search(pattern, string, flags=0)
查找字符串中第一次出现的正则表达式模式,匹配成功返回匹配对象,失败返回None.
groups()
以元组的形式返回正则表达式中的所有信息。
groups(num = 0)
返回指定组别中的元素。 从1开始计数。
groupdict()
以字典的形式返回组名和对应的信息。
split(pattern, string, maxsplit=0, flags=0)
以pattern为界限将string中的内容进行分割, 分割元素不保存。
sub(pattern, repl, string, count=0, flags=0)
将pattern中的repl 替换成tring ,支持交换顺序,将函数放入其中的操作。