正则表达式

 一、高效文本处理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 位数字电话号码

   \d{11}
 

2、提取所有 18 或 13 开头的电话号码

   (18|13)\d{9}    #我不明白这里为什么是9而不是10
 

3、提取所有“王”姓同学的名字

   王\S*  
 

4、提取所有“张”姓同学的电话号码

   (张\S*)*(\d{11})    $1 的电话是 $2  

5、重新排版

   (\S*) *(\d{11})    $1 - $2
 

 二、高效文本处理

 张伟        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]+

  

 

  

 

  

 
 

 

 

 

 

posted @ 2019-02-20 09:27  余火灬  阅读(340)  评论(0编辑  收藏  举报