正则表达式
正则表达式是对字符串操做的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。html
正则表达式是用来匹配字符串很是强大的工具,在其余编程语言中一样有正则表达式的概念,Python一样不例外,利用了正则表达式,咱们想要从返回的页面内容提取出咱们想要的内容就易如反掌了。python
正则表达式的大体匹配过程是:
1.依次拿出表达式和文本中的字符比较,
2.若是每个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。
3.若是表达式中有量词或边界,这个过程会稍微有一些不一样。正则表达式
符号 | 说明 | 实例 |
---|---|---|
. | 表示任意字符,若是说指定了 DOTALL 的标识,就表示包括新行在内的全部字符。 | 'abc' >>>'a.c' >>>结果为:'abc' |
^ | 表示字符串开头。 | 'abc' >>>'^abc' >>>结果为:'abc' |
$ | 表示字符串结尾。 | 'abc' >>>'abc$' >>>结果为:'abc' |
*, +, ? | '*'表示匹配前一个字符重复 0 次到无限次,'+'表示匹配前一个字符重复 1次到无限次,'?'表示匹配前一个字符重复 0 次到1次 | 'abcccd' >>>'abc*' >>>结果为:'abccc'编程 'abcccd' >>>'abc+' >>>结果为:'abccc'编程语言 'abcccd' >>>'abc?' >>>结果为:'abc'函数 |
*?, +?, ?? | 前面的*,+,?等都是贪婪匹配,也就是尽量多匹配,后面加?号使其变成惰性匹配即非贪婪匹配 | 'abc' >>>'abc*?' >>>结果为:'ab'工具 'abc' >>>'abc??' >>>结果为:'ab'post 'abc' >>>'abc+?' >>>结果为:'abc'url |
{m} | 匹配前一个字符 m 次 | 'abcccd' >>>'abc{3}d' >>>结果为:'abcccd' |
{m,n} | 匹配前一个字符 m 到 n 次 | 'abcccd' >>> 'abc{2,3}d' >>>结果为:'abcccd' |
{m,n}? | 匹配前一个字符 m 到 n 次,而且取尽量少的状况 | 'abccc' >>> 'abc{2,3}?' >>>结果为:'abcc' |
\ | 对特殊字符进行转义,或者是指定特殊序列 | 'a.c' >>>'a\.c' >>> 结果为: 'a.c' |
[] | 表示一个字符集,全部特殊字符在其都失去特殊意义,只有: ^ - ] \ 含有特殊含义 | 'abcd' >>>'a[bc]' >>>结果为:'ab' |
| | 或者,只匹配其中一个表达式 ,若是|没有被包括在()中,则它的范围是整个正则表达式 | 'abcd' >>>'abc|acd' >>>结果为:'abc' |
( … ) | 被括起来的表达式做为一个分组. findall 在有组的状况下只显示组的内容 | 'a123d' >>>'a(123)d' >>>结果为:'123' |
(?#...) | 注释,忽略括号内的内容 特殊构建不做为分组 | 'abc123' >>>'abc(?#fasd)123' >>>结果为:'abc123' |
(?= … ) | 表达式’…’以前的字符串,特殊构建不做为分组 | 在字符串’ pythonretest ’中 (?=test) 会匹配’ pythonre ’ |
(?!...) | 后面不跟表达式’…’的字符串,特殊构建不做为分组 | 若是’ pythonre ’后面不是字符串’ test ’,那么 (?!test) 会匹配’ pythonre ’ |
(?<= … ) | 跟在表达式’…’后面的字符串符合括号以后的正则表达式,特殊构建不做为分组 | 正则表达式’ (?<=abc)def ’会在’ abcdef ’中匹配’ def ’ |
(?:) | 取消优先打印分组的内容 | 'abc' >>>'(?:a)(b)' >>>结果为'[b]' |
?P<> | 指定Key | 'abc' >>>'(?P<n1>a)>>>结果为:groupdict{n1:a} |
正则表达式特殊序列
特殊表达式序列 | 说明 |
---|---|
\A | 只在字符串开头进行匹配。 |
\b | 匹配位于开头或者结尾的空字符串 |
\B | 匹配不位于开头或者结尾的空字符串 |
\d | 匹配任意十进制数,至关于 [0-9] |
\D | 匹配任意非数字字符,至关于 [^0-9] |
\s | 匹配任意空白字符,至关于 [ \t\n\r\f\v] |
\S | 匹配任意非空白字符,至关于 [^ \t\n\r\f\v] |
\w | 匹配任意数字和字母,至关于 [a-zA-Z0-9_] |
\W | 匹配任意非数字和字母的字符,至关于 [^a-zA-Z0-9_] |
\Z | 只在字符串结尾进行匹配 |