1.正则表达式
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
正则表达式是用来匹配字符串非常强大的工具,在其他编程语言中同样有正则表达式的概念,Python同样不例外,利用了正则表达式,我们想要从返回的页面内容提取出我们想要的内容就易如反掌了。
正则表达式的大致匹配过程是:
1.依次拿出表达式和文本中的字符比较,
2.如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。
3.如果表达式中有量词或边界,这个过程会稍微有一些不同。
正则表示的语法规则为:
3.python的正则匹配使用
python下使用正则匹配使用的是re模块
#返回pattern对象 re.compile(string[,flag]) #以下为匹配所用函数 re.match(pattern, string[, flags]) re.search(pattern, string[, flags]) re.findall(pattern, string[, flags])
参数flag是匹配模式,取值可以使用按位或运算符'|'表示同时生效,比如re.I | re.M。
可选值有:
- ? re.I(全拼:IGNORECASE): 忽略大小写(括号内是完整写法,下同)
- ? re.M(全拼:MULTILINE): 多行模式,改变'^'和'$'的行为(参见上图)
- ? re.S(全拼:DOTALL): 点任意匹配模式,改变'.'的行为
- ? re.L(全拼:LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
- ? re.U(全拼:UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
- ? re.X(全拼:VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。1)
3.1 match模块
这个方法将会从string(我们要匹配的字符串)的开头开始,尝试匹配pattern,一直向后匹配,如果遇到无法匹配的字符,立即返回 None,如果匹配未结束已经到达string的末尾,也会返回None。
执行结果为:
3.2 serch模块
search方法与match方法极其类似,区别在于match()函数只检测re是不是在string的开始位置匹配,search()会扫描整个string查找匹配,match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回None。
执行结果为:
3.3 findall模块
与match与search模块不一样的是,findall模块可以返回所有的查找结果,而他们只能返回一次。没有匹配到的话返回一个空列表
‘
执行结果为:
3.4 re的参数
re.M 多行匹配,影响^和$
执行结果为:
如果不使用^或$的话,有re.M的结果是一样的
结果为:
re.I 忽略大小写
结果为:
2.5 匹配字符命名
我们可以使用(?P<name>)给我对应匹配的命名
执行结果为: