Python的正则表达式在实际的工程中有很多的用途,比如我们想提取某个语段中的特定字符,like 邮件中的邮件地址等等
首先我们先说一下比较low的一种做法,比如在一句话中找到 ‘find wyk’ , 我们可以使用python中的 in 方法,比如 ‘find’ in sentence 如果存在会返回true,不存在则返回false,但是如果该文件中有很多的find 语句,比如 ‘find wykwyk’ ‘find w’ ‘find xxy’ ‘find wykno’ 等等,单纯的find会返回很多的值,如果我们想再多限制一下查找的条件,那么使用 in 关键字就没有使用正则表达式方便了。
正则表达式含义
. # 点可代表一切字符
\ # 起转义作用
[…] # 指代方括号中的任意字符
\d # 指代数字0-9
\D # 指代非数字
\s # 指代一切空格,包括tab制表符、空格、换行等
\S # 指代非空格
\w # 指代大小写字母、数字和下划线
\W # 指代非大小写字母、数字和下划线
*#匹配前面字符 >=0 次
+#匹配前面字符1次及以上
? # 匹配前面字符0次或1次
{m} # 匹配m次
{m,n} # 匹配m到n次
{m,} # 至少匹配m次
re模块-正则表达式
结合一个具体的例子来分析:
1、判断列表中有没有163邮箱
这里也可以不用compile,只是预先将字符串转化为正则表达式对象,效率更高,也可以直接result=re.match('(.)*163.com$',sentence[i]) ,是一样的结果。
美元符号代表以此结尾
2、找出邮箱的用户名
这里使用findall来进行匹配,使用 findall 要注意有没有括号的区别(有括号结束出括号中也就是组的内容,没有括号就输出匹配的全部字符串)
3、使用search找到邮箱用户名
match 方法是在开头处匹配模式,注意和search的区别,并且这里要特别注意组(group)的概念。