一. 正则表达式
正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。
1. 基本模式
.: 匹配任何字符
\w:匹配字母, 数字或者下划线
\W: 匹配非字母,数字,下划线
\s: 匹配空格,如\n, \t,\r
\S: 匹配非空格字符
\d: 匹配数字
\D: 除却数字之外的
^: 开头
$: 结尾
\: 转义字符
2. 次数的匹配
*: 匹配前一个字符出现0次或多次, 即可有可无
+: 匹配前一个字符出现1次或多次,即至少出现一次
?: 匹配前一个字符出现1次或0次,即前面的字符可省略
{n}: 匹配前一个字符出现n次
{n,}: 匹配前一个字符至少出现n次
{m,n}: 匹配前一个字符出现m次到n次
eg1:匹配电话号码
eg:匹配字符串
要求:字符串第一个字母为大写字母, 后面都是小写字母,且小写字母可有可无
注:中括号用于指向一个字符集合,[A-Z],[a-z],[0-9],[0-9a-zA-Z]
eg3:匹配aa邮箱
要求:邮箱地址以@qq.com结尾;@qq.com前面的内容由字母,数字或者下划线组成,大于4小于15位;符合要求的存储到/tmp/mail.txt文件中
3. 表示分组
| : 匹配 | 左右任意一个表达式即可
eg:匹配0-100之间的数值,包含0和100
(ab): 将括号中的字符作为一个分组
注:groups以元组方式返回符合条件的分组
\num: 引用分组第num个匹配到的字符串
(?P): 分组起别名
(?P=name) : 引用分组的别名
???
二. re模块高级用法
search()方法: 只找到符和条件的第一个并返回
findall()方法: 返回符合条件的所有内容
sub()方法: 对符合正则的内容进行替换
eg1:
eg2:
split()方法: 指定多个分隔符进行分割
三. python的贪婪匹配和非贪婪匹配
正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符
非贪婪匹配 总是匹配尽可能少的字符
*, ?,+, {m,n}后面加上?, 使得贪婪模式变成非贪婪模式
四. JSON(javascript object)
eg:获取输入IP的所在地理位置