一、正则表达
在使用bs4等类库进行过滤时,如果面对比较复杂的子串要求(如找到邮箱格式的文本内容时),使用正则表达往往十分有效
正则表达式,其实就是用一套规则去方便快捷的表达某一特定的文本格式
常用符号:
符号 | 含义 | 例子 | 匹配结果 |
---|---|---|---|
* | 匹配前面内容0或多次 | a*b* | aaa,bbb,ab |
+ | 匹配前面内容至少1次 | a+b+ | ab,aabb |
[] | 匹配任意一个字符 | [A-Z]* | ABC,APPLE |
() | 表达式编组(正则表达式内会优先运行) | (a*b)* | ab,aabb |
{m,n} | 匹配前面内容m到n次 | a{2,3} | aa,aaa |
[^] | 匹配任意一个不在中括号的字符 | [^A-Z]* | app,abc |
() | 表达式编组(正则表达式内会优先运行) | (a*b)* | ab,aabb |
| | 匹配 | 分开的任意一部分内容 | a|b | a,b |
. | 匹配任意单个个字符(符号、数字、字母) | [A-Z]* | ABC,APPLE |
^ | 指字符串开始位置 | ^a | abc,apple |
\ | 转义符,将特殊字符转为字面形式 | \. | . |
$ | 指字符结束位置 | b$ | ab,Bob |
?! | “不包含”,为了表示字符串从头到尾没有某些内容,常配合^和$使用 | ^(?![A-Z])$ | ab,bob |
二、Lambda
Lambda表达式本质是一个函数,并且可用做其它函数的变量使用
即f(g(x),y)或f(g(x),g(y))的形式,使用形如:
findAll(lambda tag:len(tag.attrs)==2)
上式可以找到有两个属性的标签