我也不知道为啥,突然就是想了解一下python中正则的使用,于是就花了两天的时间玩上一玩,顺便搞一下笔记。
先来讲讲什么是正则表达式,啊~~~~我也不知道,请同学们自行百度。
算了还是直接说用法吧,理论不太适合我
还是从基本的语法入手(看下表):
正则表达式 | 代表的匹配字符 |
---|---|
[0-9] | 0123456789任意之一 |
[a-z] | 小写字母任意之一 |
[A-Z] | 大写字母任意之一 |
\d | 等同于[0-9] |
\D | 等同于[^0-9]匹配非数字 |
\w | 等同于[a-z0-9A-Z_]匹配大小写字母、数字和下划线 |
\W | 等同于[^a-z0-9A-Z_]等同于上一条取非 |
先用一个例子讲解一下哈:
>>> re.match(r'a', 'abc').group()
'a'
>>> re.match(r'b', 'abc').group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>>后面的是我手动输入的命令,其他的是打印的信息。re是python使用正则表达式的模块,各位在输入命令之前当然要import re导入,match就是re的一个方法,里面的r'b'和'abc'就是我们设定的规则和需要匹配的字符串,match方法有些特殊,他是从给定字符串的开头开始匹配的,之后会说道findall和search方法。group()是将匹配到的字符转换成字符串,如果匹配不到,match返回的是None,然后调用group就会报错,这里单纯是为了方便演示。
**************************分隔线*************************************
正式开始介绍:
[] 结合表中的1、2、3不难看出,这个符号表达的就是一个集合,表明集合里面的东西都可以匹配,并且还能指定范围:0-9代表是0到9的数字。也可以单个的来,[ab]就是匹配字符a或者b
>>> re.match(r'[abc]', 'abc').group()
'a'
>>> re.match(r'[bac]', 'abc').group()
'a'
>>> re.match(r'[a-z]', 'abc').group()
'a'
>>> re.match(r'[1]', 'abc').group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
这三个例子说明,只要后面的字符串的开头,存在于集合之中,那么就认定已经匹配上了,顺序啊啥的都不管
\d:d代表的就是数字了,digital的意思,就是匹配单个数字
>>> re.match(r'\d', '123abc').group()
'1'
>>> re.match(r'\d', 'abc').group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
开头是数字就匹配1,不是当然是什么也匹配不到了
\D:这个表示的是非数字
>>> re.match(r'\D', 'abc').group()
'a'
>>> re.match(r'\D', '123abc').group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
\w:这个可不是匹配单词,这是匹配字母数字和下滑线的
>>> re.match(r'\w', '123abc').group()
'1'
>>> re.match(r'\w', '-123abc').group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
\W:匹配除了下滑线之外的字符
>>> re.match(r'\W', '-123abc').group()
'-'
>>> re.match(r'\W', '123abc').group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
细心的同学会注意到表中有这么一句话:等同于[^a-z0-9A-Z_]等同于上一条取非
^这个符号放到[]里面就是说,除了这些之外的
>>> re.match(r'[^1]', 'abc').group()
'a'
>>> re.match(r'[^a-z]', 'abc').group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
元字符 | 说明 |
---|---|
. | 代表任意字符 |
| | 逻辑或操作符 |
\ | 对下一字符取非(通常是普通变特殊,特殊变普通) |
* | 匹配前面的字符或者子表达式0次或多次 |
*? | 惰性匹配上一个 |
+ | 匹配前一个字符或子表达式一次或多次 |
+? | 惰性匹配上一个 |
? | 匹配前一个字符或子表达式0次或1次重复 |
{n} | 匹配前一个字符或子表达式 |
{m,n} | 匹配前一个字符或子表达式至少m次至多n次 |
{n,} | 匹配前一个字符或者子表达式至少n次 |
{n,}? | 前一个的惰性匹配 |
^ | 匹配字符串的开头 |
$ | 匹配字符串结束 |
[\b] | 退格字符 |
\c | 匹配一个控制字符 |