正则表达式
一、高效文本处理1
张伟 13867376400 \n 王伟 18490792248 \n 王芳 14362790855 \n 李伟 17554263700 \n 王秀英 17891981424 \n 李秀英 13221631168 \n 李娜 15212577034 \n 张秀英 17052075784 \n 刘伟 13741357668 \n 张敏 18976552131 \n 李静 13478558927 \n 张丽 14881568037 \n 王静 17718534313 \n 王丽 17377562607 \n 李强 17994411487 \n 张静 15263533786 \n 李敏 15172933607 \n 王敏 13555014022 \n 王磊 18851784343 \n 李军 14211211856 \n 刘洋 15453200742 \n
1、提取所有 11 位数字电话号码
2、提取所有 18 或 13 开头的电话号码
3、提取所有“王”姓同学的名字
4、提取所有“张”姓同学的电话号码
5、重新排版
二、高效文本处理
张伟 1994-3-22 王伟 1996-8-10 王芳 1999.2.28 李伟 1993年12月1日 王秀英 1991-11-23 李秀英 1993.2.4 李娜 1998年1月8日 张秀英 1993-11-17 刘伟 1996年9月11日 张敏 1999.5.28 李静 1991年7月13日 张丽 1991.2.2 王静 1990-9-6 王丽 1992.10.4 李强 1994.5.18 张静 1990-10-14 李敏 1997.5.12 王敏 1996-10-2 王磊 1999-8-15 李军 1992年11月4日 刘洋 1993-3-15
1、提取所有日期
\d{4}\S\d{1,2}\S\d{1,2}\S?
2、提取所有 1996 年以前出生的学生
(\S*)*199\d[0-5]\S\d{1,2}\S\d{1,2}\S?
3、重新排版
(\S*)*(\d{4})\S\(d{1,2})\S\(d{1,2})\S? $1:$2年 $3月 $4日
4、把所有 1996 年以前出生的学生出生年份改为 1996
(\S*)*(199[0-5])\S\(d{1,2})\S\(d{1,2})\S? $1:1996年 $3月 $4日
5、提取生日
(\S*) *(\d{4})\S(\d{1,2})\S(\d{1,2})\S? $1的生日是$3月$4号🎂
三、代码重构
def fib(): return ((1+sqrt(5))**n-(1-sqrt(5))**n)/(2**n*sqrt(5)) def subfib(start, end): for cur in fib(): if cur > end: return if cur >= start: print cur yield cur def foo(a, b): return a + b print 'fibonacci 10~100:' print subfib(10, 100)
1、调整缩进,将四空格缩进重构为八个空格
^(\s+) $1$1
2、重构 Python2 的 print 语法为 Python3 的 print() 函数
print*(.*)$ print($1)
3、所有函数声明添加 func_ 前缀
def*(.*) def*func_$1
4、交换函数声明中的参数位置
def (.*?)\((\w+), *(\w+)\) def $1($3, $2)
5、为所有函数添加注释模板
def*(.*): def $1: """ 函数描述: 参数: 返回值: """
三、数据格式验证
下面的正则表达式都相当复杂,幸运的是你不需要记忆这些常用的正则表达式,需要时通过任何搜索引擎都能够找到。
1、邮箱验证
^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$
2、密码强度验证(最少八个字符,至少一个大写字母,一个小写字母和一个数字)
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[^\n]{8,}$
3、18 位身份证号验证
^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$
4、IP 地址验证
^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
5、手机号验证
^(0|86|17951)?(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$
四、网络爬虫
1、提取所有 HTML 标签
<("[^"]*"|'[^']*|[^"'>])*>
2、清洗所有HTML标签
<("[^"]*"|'[^']'|[^'''>])*>
3、提取所有URL
(https?|ftp|file)(:/)?/[-A-Za-z0-9+&@#/%=~_|]
4、提取所有JPG图片的URL
(https?|ftp|file)(:/)?/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|].jpg
5、提取所有中文和中文标点
[\u4e00-\u9fa5\u3002\uff1b\uff0c\uff1a\u201c\u201d\uff08\uff09\u3001\uff1f\u300a\u300b]+