正则表达式解析网页: 正则表达式就是对字符串进行操作的逻辑公式,可以把网页源码变成字符串,再用正则表达式对其进行提取 . *
匹配除了换行符外的任意字符 匹配前一个字符0或多次
+ ?复制代码
匹配前一个字符1或多次 匹配前一个字符0或1次
^ $ 匹配字符串开头 匹配字符串结尾 \s \S 匹配空白字符 匹配任意非空白字符复制代码d \D
匹配数字 匹配任何非数字 \w \W 匹配字母和数字 匹配任何非字母和数字 [] () 一组字符 表达式复制代码
模块 re re.match代表从字符串起始进行匹配,无法匹配则为None re.match的使用方法是:re.match(pattern,string,flags=0),pattern是正则表达式,string是字符串 flags是标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等 可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。 .group(num=0):匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。 .groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。 re.search 扫描整个字符串并返回第一个成功的匹配。 (re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None; 而re.search匹配整个字符串,直到找到一个匹配。) re.findall可以找到所有的匹配
例子与解释:
import re
test=re.match('www','www.baidu.com')
print('result:',test)
print('begin and end tuple:',test.span())
print('begin:',test.start())
print('end:',test.end()) 结果: result: <re.Match object; span=(0, 3), match='www'> begin and end tuple:(0, 3) begin:0 end:3
import re
pattern='Cats are smarter than dogs'
test=re.match(r'(.) are (.?) dogs',pattern)
print('the whole sentence:',test.group(0))
print('the first result:',test.group(1))
print('the second result:',test.group(2))
print('a tuple for result:',test.groups()) 结果: the whole sentence: Cats are smarter than dogs
the first result: Cats
the second result: smarter than
a tuple for result: ('Cats', 'smarter than')
r表示字符串为非转义的原始字符串,让编译器忽略反斜杠 (.) 第一个匹配分组,.代表匹配除换行符之外的所有字符 (.?)第二个匹配分组,.?后面多个问号,代表非贪婪模式,也就是说只匹配符合条件的最少字符 group() 等同于 group(0),表示匹配到的完整文本字符 group(1) 得到第一组匹配结果,也就是(.)匹配到的 group(2) 得到第二组匹配结果,也就是(.?)匹配到的 groups()得到所有匹配结果
import re link='www.baidu.com www.baidu,com' print(re.findall('www',link)) ['www', 'www']