很多时候我们需要匹配用户输入的是否符合一定的要求(比如邮箱匹配,电话号码匹配),或者我们需要按照要求筛选出具有一定要求的文件(比如从多种文件中找出某一天的图片文件),这个时候就需要我们人为定义中规范,这种规范可以匹配符合要求的字符串,也就是我们今天要说的正则表达式。
本文使用python的re包进行正则匹配
import re
- 直接匹配
re.match('hello','hello').group() # match 前一个引号内为规则,后一个引号内为待匹配对象
输出为:
'hello'
但是这个也有弊端
re.match('hello','hello,world').group()
输出仍然为:
'hello'
也就是只匹配到前一个字符串结束,后面并不会管他
当然匹配不到的情况如下:
re.match("hello","holle,world").group()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-5-7f1d9f73b36d> in <module>
----> 1 re.match("hello","holle,world").group()
AttributeError: 'NoneType' object has no attribute 'group'
- 单字符匹配规则
字符 | 功能 |
---|---|
. | 匹配任意一个字符 |
[ ] | 匹配[]中列举的字符 |
\d | 匹配数字,即0-9 |
\D | 匹配非数字 |
\s | 匹配空格,tab键 |
\S | 匹配非空格,tab键 |
\w | 匹配单词字符,即0-9, a-z, A-Z, _ |
\W | 匹配非单词字符 |
- 匹配多个字符
字符 | 功能 |
---|---|
* | 匹配前一个字符出现零次或者无限次,即可有可无 |
+ | 匹配前一个字符出现一次或者无限次,即至少一次 |
? | 匹配前一个字符出现一个或者零次,即最多一次 |
{m} | 匹配前一个字符出现m次 |
{m,n} | 匹配前一个字符出现m-n次 |
- 匹配开头和结尾
符号 | 功能 |
---|---|
^ | 匹配开头 |
$ | 匹配结尾 |
- 匹配分组
符号 | 功能 |
---|---|
| | 匹配左右任意一个表达式 |
( ) | 将括号内的字符作为一个分组 |