爬虫基础之正则表达式
什么是正则表达式
正则表达式,又称规则表达式**,**(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。
为什么要使用正则表达式
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
判断给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”):
可以通过正则表达式,从字符串中获取我们想要的特定部分。
关于正则表达式
正则表达式的特点
灵活性、逻辑性和功能性非常强;
可以迅速地用极简单的方式达到字符串的复杂控制。
对于刚接触的人来说,比较晦涩难懂。
正则表达式的语法
正则表达式语法:使用元字符进行排列组合来匹配字符
元字符:具有固定含义的特殊符号
常用元字符:
- . 匹配除换行符以外的的任意字符
- \w 匹配字母或数字或下划线
- \s 匹配任意的空白符
- \d 匹配数字
- \n 匹配一个换行符
- \t 匹配一个制表符
- ^ 匹配字符串的开始
- $ 匹配字符串的结尾
- \w 匹配非字母或数字下划线
- \D 匹配非数字
- \S 匹配非空白符
- a|b 匹配字符a或b
- () 匹配括号内的表达式,也表示一个组
- […] 匹配字符组中的字符
- [^…] 匹配除了字符组中字符的所有字符
量词:控制前面的元字符出现的字符
- *重复零次或更多次
- + 重复一次或更多次
- ?重复一次或零次
- {n} 重复n次
- {n, } 重复n次或更多次
- {n,m} 重复n到m次
贪婪匹配和惰性匹配
- .* 贪婪匹配
- .*? 惰性匹配
爬虫中多使用惰性匹配
示例代码
class Verify(object):
# 验证手机号
def phone(self,yphone):
phone_pat = re.compile('^1([34578]\d|4[57]|5[0-35-9]|7[06-8]|8[89])\d{8}$')
res = re.search(phone_pat, yphone)
return True if reselse False
#验证邮箱
def email(self,yemail):
str =r'^[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+){0,4}@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+){0,4}$'
return True if re.match(str, yemail)else False
#验证身份证
def idCard(self,cardId):
str =r'(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)'
return True if re.match(str, cardId)else False