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

Posted 孔辉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 
      匹配一个换行符
 6 	      匹配一个制表符
 7       匹配一个单词的结尾
 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.转义

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

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

 

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

  

 

以上是关于python--(常用模块-3-正则表达式)的主要内容,如果未能解决你的问题,请参考以下文章

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

python常用模块之——正则re模块

常用模块-正则re

Python常用模块及正则表达式知识点,你需要了解的全在这了

一文秒懂python正则表达式常用函数

常用模块之re模块以及正则表达式扩展