一、基础知识:
\d:匹配数字,只匹配一次 data
\s:匹配空格,只匹配一次 space
\w:匹配数字字母下划线 [A-Za-z0-9_] 或中文及其组合 word
\D\S\W:非数字,非空格,非单词字符
. :匹配任意字符
* :前面字符重复0-N次
+ :前面字符重复1-N次
? :前面字符匹配0/1次
\ :转义字符
^ :规则开始 $:规则结束 ^\d表示必须以数字开头,\d$:必须以数字结束,py可以匹配'python',加上^py$:'py',整行匹配
\b[备选字符集]+\b:匹配一个以[备选字符集]组成的单词(\b比较特别各种符号空白开头结尾都可以匹配)
二、三对括号:
[] :字符集概念,表范围 匹配括号中的任何字符 [abc]匹配a/b/c任一,[a-g]匹配编码连续字符集a-g中一个
[^] :非[] [^\n\0] 匹配任意除换行和结束字符的字符 \0空字符 空白符[\t\n\x0B\f\r]:不知准确性
{} :量词 匹配数量
如果我想要匹配多个字符怎么办?难道要把一个备选字符集复制成N个吗?当然不用,这时量词就闪亮登场了。量词的语法是非常简单的。
规则:- [备选字符集]{min} :当中括号只有一个参数时表示完整匹配,[备选字符集]的字符一定要连续出现min次才会被选中,多了会截断,连续出现min*2次时会被选中两次。
- [备选字符集]{min, }:当中括号只有一个参数还加了逗号时,表示只要[备选字符集]连续出现min次以上就会选中,而且不会截断,直到出现[备选字符集]以外的字符。
- [备选字符集]{min, max}:当中括号有两个参数时表示最多匹配连续max次的[备选字符集],最少匹配连续min次的[备选字符集],比如a{1,3}匹配aaaaa的时候,第一次选中的是aaa,第二次选中的是aa而不是单个a,按照max优先原则。
#### 简写: - [备选字符集]{0,1} => [备选字符集]?
- [备选字符集]{0, } => [备选字符集]*
- [备选字符集]{1, } => [备选字符集]+
以后看到?*+就蒙圈的就先把那些特殊字符转为量词的标准写法吧
() :分组group()
用来多规则模糊匹配,要从某处获取一个IP地址,但不知道是IPv4还是IPv6,那么就可以用([IPv4的规则]|[IPv6的规则])来匹配,而不用分别写两个正则来匹配。
对部分数据进行抽取,<title>(.*?)</title>这个正则表达式就会抽取标签之中的内容单独存放,而不用获取到元数据之后再做数据的二次清洗。
三、贪婪与非贪婪匹配
正则默认贪婪匹配,匹配尽可能多的字符
>>> re.match(r'^(\d+)(0*)$',