正则表达式(python中使用re包)
- ^ : 以某个字符开头,例如^b,为字母b开头
- . :代表任意字符
- * : 前面的字符出现任意多次,例如“^b.*”代表以b开头,后面任意位任意字符的字符串
- $ : 代表以某个字符结尾。例如3$意味以3结尾
- ?: 是一种非贪婪匹配的模式,默认为贪婪匹配(倒序查找),例如“.*?(b.*?b).*”,匹配“booooobbby”,输出为“booooob” ,如果第二个b不加?,则会贪婪匹配从右边开始,即匹配到最后一个b
- (): 提取括号中的子字符串
- ‘+’ : 至少出现一次
- {} : 限定出现的次数
- | : 或
- [] : 字符串匹配中括号中的任意一个字符都可以,[0-9]意味区间,[^1]意味不等于1
- \s \S : s代表空格,S代表不为空格
- \w \W : 代表字母下划线,W代表非字母下划线
- [\u4E00-\u9FA5] : 代表汉字
- \b : 代表数字
深度优先和广度优先遍历算法
url常见去重策略
- 将访问过的URL保存到数据库中
- 将访问过的URL储存在set中,只需要0(1)的代价就可以查询url
- URL经过md5等hash运算后保存在set中
- 用bitmap方法,把访问过的url通过hash函数映射到某一位
- bloomfilter方法对hash算法进行改进,多重hash函数降低冲突
字符串编码
- 计算机只能处理数字,文本必须转换为数字才能处理。计算机中以8个bit作为一个字节,所以一个字节能表示的最大的数字就是255
- 计算机是美国人发明的,所以一个字节就能表示所有的字符,所以ASC||(一个字节)就成了美国人的标准编码
- ASCII码处理中文明显是不够的,所以中国制定了GB2312编码,用两个字节表示一个汉字。GB2312还把ASCII包含进去了,同理日本、韩国等国家都各有一套自己的编码,如此一来,出现多种语言混合的文本就会出现乱码。
- Unicode是将所有语言统一到一套编码里。乱码问题解决了,但是如果文本内容全部都是英文的话,传输和储存需要的空间就扩大了一倍。
- utf-8,可以变长的编码。英文压缩至一个字节,汉字三个字节,特别生僻的4个字节。但是utf-8在编程处理的时候会变的复杂(内存运算复杂)
- 所以一般的做法是储存文件使用utf-8编码,内存运算时使用Unicode编码。Python2Windows默认为GB2312编码,Linux默认为UTF-8编码,在做decode运算的时候要先转换为Unicode,Python3默认为Unicode编码