我们在处理字符串时,经常会查找符合某些浮渣规则的字符串的需求。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
一、正则表达式语法

  1. 行定位符
    行定位符就是用来描述字符串的便界。“^”表示行的开始;"$"表示行的结尾。如:
^tm 			#表示要匹配字符串tm的开始位置是行头
tm$			#表示要匹配字符串tm的开始位置是结尾

2.元字符

代码

说明

.

匹配除换行符以外的任意字符

\w

匹配字母或数字或下划线

\s

匹配任意的空白符

\d

匹配数字

\b

匹配单词的开始或结束

^

匹配字符串的开始

$

匹配字符串的结束

3.限定符

限定符

说I明


匹配前面的字符零次或一次

+

匹配前面的字符一次或多次

*

匹配前面的字符零次或多次

{n}

匹配前面的字符n次

{n,}

匹配前面的字符至少n次

{n,m}

匹配前面的字符最少n次,最多m次

4.排除字符
当我们匹配不符合指定字符集合的字符串时,可以用到以下的表达式:

[^a-zA-Z]				#表示用于匹配一个不是字母的字符

5.选择字符
试想以下,如何匹配身份证号码?首先需要了解身份证号码的规则。身份证号码长度为15位或18位,如果位15位,则全部是数字;如果位18位,前17位是数字,最后一位是检验位,可能是数字或字母。
在上述的描述中,包含着条件选择的逻辑,这就要使用选择字符(|)来实现,该字符可理解是“或”,表达式则如下:

(^\d{15}$) | (^\d{18}$) |(^\d{17}) (\d|X|x)$			#表示可以匹配15为数字或者18 为数字,或者17位数字,最后一位可以是数字或者是X或者是x。

6.转义字符
正则表达式中转义字(\)和Python中大同小异,都是将特殊字符(“.”,"?","")等转化普通的字符。
用正则表达式匹配如127.0.0.2.1这样的IP地址,直接使用字符,格式为:

[1-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}					#[1-9]表示在1到9的数字中取任意的数字,{1,3}表示只能是1到3 的长度

但是这样显然不是正确的,因为“.”可以匹配任意的字符,这样匹配的话,会将1271011011这样的字符匹配出来,所以就要用到转义字符(\),格式为:

[1-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}			#[1-9]表示在1到9的数字中取任意的数字,{1,3}表示只能是1到3 的长度

7.在Python中使用正则表达式的语法
在Python中使用正则表达式时,是将其作为模式字符串使用的。如将匹配不是字符串的一个字符的正则表达式表示为模糊字符串,可以使用下面的代码:

'[^a-zA-Z]'

匹配以字母m开头的单词的正则表达式转换为模式字符串,则不能直接在其两侧添加引号定界符,代码为:

'\\bm\\w*\\b'

注意,由于模式字符串中可能会包含大量的特殊字符和反斜杠,所以需要写为原生字符串,也即是在模式字符串前加R或r.如上面的模式字符串采用原生字符串表示就是:

r'\\bm\\w*\\b'

谢谢!