Python正则表达式

在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
正则表达式并不是python中特有的功能,它是一种通用的方法。python中的正则表达式库,所做的事情是利用正则表达式来搜索文本。要使用它,你必须会自己用正则表达式来描述文本规则。
#1. 入门
有个正则表达式是hi,那么它就可以匹配出文本中所有含有hi的字符
Hi, I am Shirley Hilton. I am his wife.
完全匹配后,会得到两个hi, 两个hi分别来自Shirley和his
|
|
##1.1. 元字符
\b在正则表达式中表示单词的开头或结尾,空格、标点、换行都算是单词的分割。而\b自身又不会匹配任何字符,它代表的只是一个位置
对与上面的代码正则表达式修改为’\bhi\b’, 则输出结果为No match
.表示匹配除了换行符以外的任意字符
对于上述代码中的正则修改为
i., 输出结果为[‘i,’, ‘ir’, ‘il’, ‘is’, ‘if’]
- 与
.类似的一个符号是“\S”,它表示的是不是空白符的任意字符, 这里S是大写
对于上面代码正则表达式修改为
i\S,则输出结果为[‘i,’, ‘il’, ‘il’, ‘is’, ‘if’]
- 在很多搜索中,会用
?表示任意一个字符,*表示任意数量连续字符,这种被称为通配符. 但在正则表达式中,任意字符是用.表示,而*则不是表示字符,而是表示数量:它表示前面的字符可以重复任意多次(包括0次),只要满足这样的条件,都会被表达式匹配上。()\bhi\b.*\bLucy\b的意思:先是一个单词hi,然后是任意个任意字符(但不能是换行),最后是Lucy这个单词
|
|
\d匹配一位数字(0,或1,或2,或……)
0\d{2}-\d{8}。这里\d后面的{2}({8})的意思是前面\d必须连续重复匹配2次(8次)
\s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格, 这里s是小写
对于第一段代码正则表达式修改为
I\s,则输出结果为[‘I ‘, ‘I ‘]
\w匹配字母或数字或下划线或汉字等
|
|
| 代码 | 说明 |
|---|---|
. |
匹配除换行符以外的任意字符 |
\w |
匹配字母或数字或下划线或汉字 |
\s |
匹配任意的空白符 |
\d |
匹配数字 |
\b |
匹配单词的开始或结束 |
^ |
匹配字符串的开始 |
$ |
匹配字符串的结束 |
##1.2. 重复
| 代码/语法 | 说明 |
|---|---|
| * | 重复零次或更多次 |
| + | 重复一次或更多次 |
| ? | 重复零次或一次 |
| {n} | 重复n次 |
| {n,} | 重复n次或更多次 |
| {n,m} | 重复n到m次 |
- Windows\d+匹配Windows后面跟1个或更多数字
- ^\w+匹配一行的第一个单词
##1.3. 字符类
[]表示满足括号中任一字符。比如[hi],它就不是匹配hi了,而是匹配h或者i
对于上面代码正则表达式修改为
[hi],则输出结果为[‘i’, ‘h’, ‘i’, ‘i’, ‘h’, ‘i’, ‘i’][aeiou]就匹配任何一个英文元音字
[.?!]匹配标点符号(.或?或!)
[0-9]代表的含意与\d就是完全一致的:一位数字
[a-z0-9A-Z_]也完全等同于\w
##1.4. 反义
| 代码/语法 | 说明 |
|---|---|
| \W | 匹配任意不是字母,数字,下划线,汉字的字符 |
| \S | 匹配任意不是空白符的字符 |
| \D | 匹配任意非数字的字符 |
| \B | 匹配不是单词开头或结束的位置 |
| [^x] | 匹配除了x以外的任意字符 |
| [^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |
\S+匹配不包含空白符的字符串。<a[^>]+>匹配用尖括号括起来的以a开头(除了>以外)的字符串。
##1.5. 分枝条件
写出一个正则表达式用于匹配下面的数字串
(021)88776543
010-55667890
02584453362
0571 66345673
很容易写出\(?0\d{2, 3}[) -]?\d{8}, \(?表示出现0个或者1个做括号, \d{2, 3}表示匹配2个或者3个数字, [) -]?表示匹配)或者-或者空格, \d{8}表示匹配8个数字
但是这样依然不能正确的表示以上的数字串, 可能出现括号不匹配的问题, 例如(02188776543也会匹配成功
这里需要使用|类似与数学中或操作
可以写出
\(0\d{2,3}\)\d{7,8}|0\d{2,3}[ -]?\d{7,8}, 其中(是对括号进行转义, ()在正则表达式中有特定的用途,另外|操作匹配时,会按照从左往右的顺序,一旦匹配成功就停止验证后面的规则
#2.Python中的re模块
##2.1. 模块函数
|
|
|
|
|
|
re.match与re.search的区别
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
|
|
|
|
|
|
#3. 参考链接