我们在处理字符串时,经常会查找符合某些浮渣规则的字符串的需求。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
一、正则表达式语法
- 行定位符
行定位符就是用来描述字符串的便界。“^”表示行的开始;"$"表示行的结尾。如:
^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'
谢谢!