【python----发轫之始】【正则表达式总结】

JnX 2020-06-27

初识正则表达式

能够按照某种模式匹配一系列具有相似特征的字符串。
比如说:垃圾邮箱拦截、邮件分类、验证手机号码等等功能。

正则表达式中的符号

*: 作用是代表前面的字符匹配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 ,支持交换顺序,将函数放入其中的操作。

相关推荐