1.特殊符号和字符
1.1 特殊符号
说明 | 样例 | |
^或(\A) | 匹配字符串的开始 | ^hehe |
$或(\Z) | 匹配字符串的结尾 | txt$ |
re1|re2 | 或 | ha|he |
. | 匹配除换行符外的任意字符 | a1b,a2b,a#b |
* | 匹配(前面出现的正则表达式)0次或多次 | [A-Za-z0-9]* |
+ | 匹配(前面出现的正则表达式)1次或多次 | [a-z]+\.com |
? | 匹配(前面出现的正则表达式)0次或1次 | goo? |
{N} | 匹配(前面出现的正则表达式)N次 | [0-9]{3} |
{M,N} | 匹配(前面出现的正则表达式)M次或N次 | [0-9]{5,9} |
[...] | 匹配字符组里出现的任意一个字符 | [aeiou] |
[..x-y..] | 匹配从字符x到y中的任意一个字符 | [0-9],[A-Za-z] |
[^...] | 不匹配此字符集中出现的任何一个字符,包括某一范围的字符 | [^aeiou],[^A-Za-z0-9] |
(*|+|?|{})? | 用于上面出现的任何“非贪婪”。版本重复匹配次数符号 | .*?[a-z] |
(...) | 匹配括号中正则表达式,并保存为子组 | ([0-9]{3})?,f(oo|u)bar |
1.2 特殊字符
说明 | 样例 | |
\d | 匹配任何数字;(\D 与之相反,匹配任何非数字[^0-9]) | \d+.txt |
\w | 匹配任何数字和字符(包括汉字),(\W 与之相反) | [A-Za-z_]\w+ |
\s | 匹配任何空白符,(\S与之相反) | of\sthe |
\b | 匹配单词边界,(\B与之相反) | \bThe\b |
\nn | 匹配已保存的子组(参考(...)) | price:\16 |
\c | 逐一匹配特殊字符c(即取消它的特殊含义) | \.,\\,\* |
2. 常见字符详解
2.1 匹配任意一个单个的字符(.)
.. # 任意两个字符
\. # 匹配英文句号(.)
2.2 (-)与(^)
[^\t\n] # 除制表符TAB和换行符以外的任意一个字符
["-a] # 在"和a之间的任意一个字符(ASCII码值在34-97之间)
2.3 常见案例
(1)匹配IP:
(([01]?\d?\d|2[0-4]\d|25[0-5])\.){3}([01]?\d?\d|2[0-4]\d|25[0-5])
(2)匹配电话号码:
eg:800-555-1212
\d{3}-\d{3}-\d{4}
(3)匹配邮箱:
eg: abc@baidu.com
\w+@\w+\.com
(4)匹配浮点型
eg: 2,100,0.103
\d+(\.\d*)?
3. re 模块核心函数和方法
函数 | 描述 | 备注 |
compile(pattern,flags=0) | 对正则表达式pattern进行编译 | |
match(pattern,string,flags=0) | 在字符串string中匹配pattern;必须是从开头即匹配 | |
search(pattern,string,flags=0) | 在字符串string中搜索pattern的第一次出现 | |
findall(pattern,string[,flags]) | 在字符串string中搜索pattern的所有(非重复)出现,结果以列表方式返回 | |
finditer(pattern,string[,flags]) | 与findall() 相同,结果以迭代器方式返回 | |
split(pattern,string,max=0) | 使用pattern中的分隔符,把字符串string分隔为一个列表 | |
sub(pattern,repl,string,max=0) | 把字符串string中所有匹配pattern的地方替换成repl | |
group(num=0) | 返回全部匹配对象(或指定编号是num的子组) | |
groups() | 返回一个包含全部匹配的子组元组 |
4. 匹配与搜索
(1)匹配
试图从整个字符串的开头进行匹配
(2)搜索
可从一个字符串的任意位置开始匹配
5. 一个好用工具
https://regex101.com/r/hYaEhK/1
![](https://i-blog.csdnimg.cn/blog_migrate/642ccff9debfaf414f5ab9d95ae45707.png)