正则表达式

一、定义

  • 正则表达式是对字符串操作的一种逻辑公式,一般使用正则表达式对字符串进行匹配和过滤
  • 正则表达式由普通字符和元字符组成
  • 优点:灵活,功能性强,逻辑性强
  • 缺点:上手难,一旦上手,会爱上这个东西
  • 工具:各大文本编辑器一般都有正则匹配功能。在线测试网址:http://tool.chinaz.com/regex/

二、普通字符

    普通字符包含大小写字母、数字。在匹配普通字符时直接写就好。比如"abc"匹配的就是”abc”

三、元字符

1. 字符组

    用[ ]括起来,在[ ]中出现的内容会被匹配。例如:[abc]匹配a或b或c

  • [a-z]:匹配a到z之间的一个字母
  • [0-9]:匹配所有阿拉伯数字的一个
  • [a-zA-Z0-9]:匹配a-z或A-Z或0-9其中的一个

2. 简单元字符

  • .:匹配换行符以外的任意字符
  • \w:匹配字母或数字或下划线
  • \s:匹配任意的空白符
  • \d:匹配数字
  • \n:匹配一个换行符
  • \t:匹配一个制表符
  • \b:匹配一个单词的结尾
  • ^:匹配字符串的开始
  • $:匹配字符串的结尾
  • \W:匹配非字母或数字或下划线
  • \D:匹配非数字
  • \S:匹配非空白符
  • a|b:匹配字符a或字符b
  • ():匹配括号内的表达式,也表示一个组
  • [...]:匹配字符组中的字符
  • [^...]:匹配除了字符中字符的所有字符

3. 量词

  • *:重复0次或更多次
  • +:重复一次或更多次
  • ?:重复0次或一次
  • {n}:重复n次
  • {n, }:重复n次或更多次
  • {n, m}:重复n到m次

四、贪婪匹配与惰性匹配

1. 贪婪匹配

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

str:hello world
reg: h.*
此时匹配的结果:hello world
str:<div>hello</div>
reg:<.*>
此时匹配的结果:<div>hello</div>

 

2. 惰性匹配

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

str:hello world
reg:h.*?
此时匹配的结果:h

 

str:<div>hello</div>
reg:<.*?>
此时匹配的结果:
<div>
</div>

 

 五、分组

    在正则中使用()进行分组。

    例如要匹配一个相对复杂的身份证号。身份证号分成两种。老的身份证号有15位,而新的身份证号有18位。并且新身份证号结尾可能是x

正则为:
^([1-9]\d{16}[0-9x]|[1-9]\d{14})$

六、转义

    在正则表达式中,有很多有特殊意义的元字符,比如\n和\s等。如果要在正则中匹配正常的"\n"而不是换行就需要对"\"进行转义。

    同理,在python中,对于\n,\s等也是有特殊意义的,如果要得到"\n"也需要对"\"进行转义,所以,如果需要匹配字符\n,在正则表达及python表达中需要写成如下表格形式。

目标 正则 python
\n \\n \\\\n

表1  "\n"转义

    此时可以利用r"\n"不转义,即上表中python中正则表达可写为:r"\\n"

posted @ 2018-11-16 21:49  Ethan_Y  阅读(252)  评论(0编辑  收藏  举报