python--(常用模块-3-正则表达式)

python--(常用模块-3-正则表达式)

  正则表达式是对字符串操作的⼀种逻辑公式. 我们⼀般使⽤正则表达式对字符串进⾏匹
  配和过滤. 使⽤正则的优缺点:
  优点: 灵活, 功能性强, 逻辑性强.
  缺点: 上手难. 一旦上手, 会爱上这个东西
  工具: 各文本编辑器一般都有正则匹配功能. 我们也可以去
  http://tool.chinaz.com/regex/进⾏在线测试

  正则表达式由普通字符和元字符组成. 普通字符包含大小写字母, 数字. 在匹配普通字符
  的时候我们直接写就可以了. 比如"abc" 匹配的就是"abc". 我们如果用python也可以实现相
  同的效果. 所以普通字符没什么好说的. 重点在元字符上.

  元字符: 元字符才是正则表达式的灵魂. 元字符中的内容太多了, 在这里我们只介绍一些
  常用的..

1.字符组

  字符组很简单用[]括起来,在[]中出现的内容会被匹配.例如;[abc]匹配a或b或c  

  如果字符组中的内容过多还可以使⽤- , 例如: [a-z] 匹配a到z之间的所有字⺟ [0-9]
匹配所有阿拉伯数字
  思考: [a-zA-Z0-9]匹配的是什么?
2. 简单元字符
  基本的元字符. 这个东西网上一大堆,下面是几个常用的

 1 .       匹配除换行符以外的任意字符
 2 \w     匹配字母或数字或下划线
 3 \s      匹配任意的空白字符
 4 \d      匹配数字
 5 \n      匹配一个换行符
 6 \t      匹配一个制表符
 7 \b      匹配一个单词的结尾
 8 ^       匹配字符串的开始
 9 $       匹配字符串的结束
10 \W      匹配非字母或数字或下划线
11 \D      匹配非数字
12 \S      匹配非空字符
13 a|b     匹配字符a或字符b
14 ()      匹配括号内的表达式,也表示一个组
15 [...]   匹配字符组中的字符
16 [^...]  匹配除了字符组中字符的所有字符

 

  3.量词

    我们到目前匹配的所有内容都是单一的文字符号,那如何一次性匹配很多个字符呢,

我们用到量词

1 *       重复零次或更多次
2 +       重复一次或更多次
3 ?       重复零次或一次
4 {n}     重复n次
5 {n,}    重复n次或更多次
6 {nm}    重复n到m次

 

  4.惰性匹配和贪婪匹配

    在量词中的*, +,{} 都属于贪婪匹配. 就是尽可能多的匹配到结果

 1 str: 麻花藤昨天让英雄联盟关服了 2 3 reg: 麻花藤.* 4 5 此时匹配的是整句话 

  在使用.*后面如果加了?则是尽可能的少匹配.表示惰性匹配

 1 str: 麻花藤昨天让英雄联盟关服了
 2 reg: 麻花藤.*?
 3 此时匹配的是 麻花藤
 4 str: <div>胡辣汤</div>
 5 reg: <.*>
 6 结果: <div>胡辣汤</div>
 7 str: <div>胡辣汤</div>
 8 reg: <.*?>
 9 结果
10  <div>
11   </div>
12 str: <div>胡辣汤</div>
13 reg: <(div|/div*)?>
14 结果:
15   <div>
16   </div>

  ..*?x的特殊含义 找到下一个x为止. 

 1 str: abcdefgxhijklmn 2 reg: .*?x 3 结果:abcdefgx 

5.分组

    在正则中使⽤()进⾏分组. 比如. 我们要匹配⼀个相对复杂的⾝份证号. ⾝份证号分
成两种. 老的⾝份证号有15位. 新的⾝份证号有18位. 并且新的⾝份证号结尾有可能

1 给出以下正则
2 ^[1-9]\d{13,16}[0-9x]$
3 
4 ^[1-9]\d{14}(\d{2}[0-9x])?$
5 
6 
7 ^([1-9]\d{16}[0-9x]|[1-9]\d{14})$

 

6.转义

  在正则表达式中, 有很多有特殊意义的是元字符, ⽐如\n和\s等,如果要在正则中匹
配正常的"\n"⽽不是"换⾏符"就需要对"\"进⾏转义, 变成'\\'.在python中, ⽆论是正则表达式, 还
是待匹配的内容, 都是以字符串的形式出现的, 在字符串中\也有特殊的含义, 本身还需要转

义. 所以如果匹配一次"\n", 字符串中要写成'\\n', 那么正则⾥就要写成"\\\\n",这样就太麻烦了.
这个时候我们就⽤到了r'\n'这个概念, 此时的正则是r'\\n'就可以了

 

练习:
1. 匹配邮箱
2. 匹配手机号
3. 匹配生日.日期格式(yyyy-MM-dd)
4. 匹配电话号码
5. 匹配IP

  

 

posted @ 2018-10-10 16:14  孔辉  阅读(197)  评论(0编辑  收藏  举报