24_正则表达式

一、定义
    
    正则表达式是对字符串操作的一种逻辑公式,一般使用正则表达式对字符串进行匹配和过滤。
    优点:灵活、功能性强,逻辑性强。
     http://tool.chinaz.com/regex/     #在线测试工具
    正则表达式由普通字符和元字符组成。普通字符——大小写字母、数字。
 
二、元字符
 
    1、字符组
 
        字符组用 [ ]括起来,[ ]内容会被匹配。例如[abc]  匹配 a 或 b 或 c 。字符组中的内容过多可以 [a-z] :a~z之间的所有字母 [0-9]; [a-zA-Z0-9]匹配大小写字母数字。
 
    2、简单元字符
元字符 匹配内容
. 匹配除换行以外的任意字符
w 匹配字母或数字或下划线
s 匹配任意空白符
d 匹配数字
匹配一个换行符
匹配一个制表符
 匹配一个单词的结尾
^ 匹配字符串的开始
$ 匹配字符串的结尾
W 匹配非字母数字下划线
D 匹配非数字
S 匹配非空白符
a | b 匹配字符a或字符b
( ) 匹配括号内的表达式,也表示一个组
[...] 匹配字符组中的字符
[^...] 匹配除了字符组中的字符的所有字符
    3、量词 —— 一次匹配很多个字符
 
 
量词 解释
* 重复0次货更多次
+ 重复1 次或更多次
? 重复0次或1次
{n} 重复n次
{n, } 重复n次或更多次
{n, m} 重复n到m次
    4、贪婪匹配和惰性匹配
 
        在量词中的 * ,+ ,{} 都属于贪婪匹配。就是尽可能多的匹配结果
  1 str: 麻花藤昨天让英雄联盟关服了 2 reg: 麻花藤.* 3 此时匹配的是整句话 
     
   .* 后面如果加了? 则是尽可能的少匹配,表示惰性匹配
 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、分组 ——  正则中使⽤( )进⾏分组
 
    匹配 老式新式身份证号
 1 ^[1-9]d{14}(d{2}[0-9x])?$  2 ^([1-9]d{16}[0-9x]|[1-9]d{14})$ 
 
  6、转义
 
在正则表达式中, 有很多有特殊意义的是元字符, 如 和s等,如果要在正则中匹配正常的" "而不是"换行符"就需要对""进行转义, 变成'\'.在python中, 无论是正则表达式, 还是待匹配的内容, 都是以字符串的形式出现的, 在字符串中也有特殊的含义, 本身还需要转义. 所以如果匹配一次" ", 字符串中要写成'\n', 那么正则里就要写成"\\n",这样就太麻烦了.这个时候我们就?到了r' '这个概念, 此时的正则是r'\n'就可以了.
原文地址:https://www.cnblogs.com/hq82/p/9792158.html