正则表达式
正则表达式
正则表达式本身也和python没有什么关系,就是匹配字符串内容的一种规则。
官方定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
正则表达式 字符串的规则
来帮助我们1.检测某一段字符串是否符合规则
2.从一大段文字中将符合规则的匹配出来 ( 爬虫)
只和字符串相关
在线测试工具 http://tool.chinaz.com/regex/
字符组 : [字符组]
在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示
字符:
[012345] [0-5] [0-9]
[9-0] 不能从大到小来规定范围
字符组内所有的范围都是根据ascii码来的
数字 [0-9]
字母 小写 [a-z] 大写 [A-Z] 大小写 [A-Za-z]
数字和大小写字母 [A-Z0-9a-z]
数字+大小写字母+下划线 [A-Z0-9a-z_]
在字符组当中 -是有特殊意义的,如果我们想取消这个横杠的特殊意义 需要使用\作为转义符
字符组之外的其他带有特殊规则的元字符:
[0-9] \d 匹配任意一个数字 digit
[A-Z0-9a-z_] \w 标识符
\n 匹配回车换行
\t 匹配制表符 table
空格 本身匹配 空格
\s 匹配所有的空白
\b 匹配一个单词的边界
反义词
\W 除了数字字母下划线之外的所有
\D 除了数字之外的所有
\S 除了空白之外的所有
. 匹配换行符之外的所有字符
\d \w \s(\n \t)
\D \W \S
.
匹配所有 :[\D\d] [\W\w] [\S\s]
非字符组 :[^123]除了123之外的都匹配
开始符和结束符
^ 永远在一个规则的最开始
$ 永远在一个规则的最末尾
^和$ 规定了这个字符串的长度,并且在这个长度内的内容
| 或的概念
123|456
www.baidu.com | www.oldboy.com
分组的概念
www\.(baidu|oldboy)\.com
总结
\d \w \s \n \t \D \W \S \b
[],[^]
^ $
| 或 永远把相对长的规则放在左侧
()
.
元字符 |
匹配内容 |
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\n | 匹配一个换行符 |
\t | 匹配一个制表符 |
\b | 匹配一个单词的结尾 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结尾 |
\W |
匹配非字母或数字或下划线 |
\D |
匹配非数字 |
\S |
匹配非空白符 |
a|b |
匹配字符a或字符b |
() |
匹配括号内的表达式,也表示一个组 |
[...] |
匹配字符组中的字符 |
[^...] |
匹配除了字符组中字符的所有字符 |
量词:
量词 在量词的范围内尽可能多的匹配
{n} 表示出现n次
{n,} 表示至少出现n次
{n,m} 表示出现n-m次
? 表示匹配0次或1次
+ 表示匹配1次或多次
* 表示匹配0次或多次
元字符 量词
匹配的是一个字符的内容
量词 表示的是匹配的次数
匹配整数 [1-9]\d*|0
匹配小数 \d+\.\d+
匹配一个整数或者小数 \d+\.\d+|([1-9]\d*|0) \d+\.?\d* \d+(\.\d+)?
在量词范围内尽可能多的匹配 - 贪婪匹配
正则表达式 匹配身份证号码
15位 首位不能为0 ^[1-9]\d{14}$
18位 首位不能为0,末尾可能是x和数字 ^[1-9]\d{16}[\dx]$
合起来 ^([1-9]\d{16}[\dx]|[1-9]\d{14})$ [1-9]\d{14}(\d{2}[\dx])?
量词 |
用法说明 |
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
转义
在测试的网页上写的是什么
就直接复制过来
然后在字符串外面加上一个r
r'\\n' --> r'\n'
t 't'
\t \本身具有转义作用,相当于改变了t本来的面目
\\ \本身具有转义作用,\\相当于转义了\的特殊作用,相当于普通的一个'\'
贪婪匹配 :默认的 尽可能多匹配
惰性匹配 :需要我们手动设置的 尽可能少匹配
a.* 以a开头的任意一个字符串都可以被匹配出来
a.*? 非贪婪
a.*?x 从a开始匹配,匹配任意长度的字符,遇到一个x就立即停止