是指定一组与之匹配的字符串,
限定符号
a* a出现0或者多次
a+ a出现1次或者多次
a? a出现0次或者1次
a{2,5} 出现在2到5次之间
或运算法
(cat|dog) 匹配 cat或者dog
字符类
[abz]+ 表示匹配的字符只能是中括号中的字母 如果使用了 ^则为取反符号
元字符、 /d 代表数字字符
/w代表英文字符数字加上下划线
/s代表tab和换行符
其中/加大写的DWS则表示取反符号
.表示任意字符 不包括换行符号
^a 匹配行首的 a$只匹配行尾
正向先行断言
例如正则表达式 (T|t)he(?=\sfat)
,表示:匹配大写字母 T
或小写字母 t
,后面跟字母 h
,后跟字母 e
。 在括号中,我们定义了正向先行断言,它会引导正则表达式引擎匹配后面跟着 fat
的 The
或 the
。
"(T|t)he(?=\sfat)" => The fat cat sat on the mat.
负向先行断言
当我们需要指定第一部分表达式的后面不跟随某一内容时,使用负向先行断言。负向先行断言的定义跟我们定义的正向先行断言一样, 唯一的区别在于我们使用否定符号 !
而不是等号 =
,例如 (?!...)
。 我们来看看下面的正则表达式 (T|t)he(?!\sfat)
,表示:从输入字符串中获取全部 The
或者 the
且不匹配 fat
前面加上一个空格字符。
"(T|t)he(?!\sfat)" => The fat cat sat on the mat.
正向后行断言
正向后行断言用于获取跟随在特定模式之后的所有匹配内容。正向后行断言表示为 (?<=...)
。例如正则表达式 (?<=(T|t)he\s)(fat|mat)
,表示:从输入字符串中获取在单词 The
或 the
之后的所有 fat
和 mat
单词。
"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
负向后行断言
负向后行断言是用于获取不跟随在特定模式之后的所有匹配的内容。负向后行断言表示为 (?<!...)
。例如正则表达式 (?<!(T|t)he\s)(cat)
,表示:在输入字符中获取所有不在 The
或 the
之后的所有单词 cat
。
"(?<!(T|t)he\s)(cat)" => The cat sat on cat.
贪婪/懒惰匹配
<.+>默认匹配任意字符
<.+?> 懒惰匹配任意字符
?= | 正向先行断言 |
?! | 负向先行断言 |
?<= | 正向后行断言 |
?<! | 负向后行断言 |
标记 | 描述 |
---|---|
i | 不区分大小写:将匹配设置为不区分大小写。 |
g | 全局搜索:搜索整个输入字符串中的所有匹配。 |
m | 多行匹配:会匹配输入字符串每一行。 |
函数
match 在字符串的开头进行匹配
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 None。
re.match(pattern, string, flags=0)
re.search 扫描整个字符串并返回第一个成功的匹配。
函数语法:
re.search(pattern, string, flags=0)
函数参数说明:
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串。 |
flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志 |
search 在整个字符串中进行匹配
常用正则表达式
- 正整数:
^\d+$
- 负整数:
^-\d+$
- 电话号码:
^+?[\d\s]{3,}$
- 电话代码:
^+?[\d\s]+(?[\d\s]{10,}$
- 整数:
^-?\d+$
- 用户名:
^[\w\d_.]{4,16}$
- 字母数字字符:
^[a-zA-Z0-9]*$
- 带空格的字母数字字符:
^[a-zA-Z0-9 ]*$
- 密码:
^(?=^.{6,}$)((?=.*[A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z]))^.*$
- 电子邮件:
^([a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4})*$
- IPv4 地址:
^((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))*$
- 小写字母:
^([a-z])*$
- 大写字母:
^([A-Z])*$
- 网址:
^(((http|https|ftp):\/\/)?([[a-zA-Z0-9]\-\.])+(\.)([[a-zA-Z0-9]]){2,4}([[a-zA-Z0-9]\/+=%&_\.~?\-]*))*$
- VISA 信用卡号码:
^(4[0-9]{12}(?:[0-9]{3})?)*$
- 日期(MM/DD/YYYY):
^(0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])[- /.](19|20)?[0-9]{2}$
- 日期(YYYY/MM/DD):
^(19|20)?[0-9]{2}[- /.](0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])$
- 万事达信用卡号码:
^(5[1-5][0-9]{14})*$