目录
使用XPath可以从HTML源码中提取数据,但是XPath有局限性,只能在结构化的HTML或XML格式的文档中。正则表达式则比较通用。
1. re.compile函数
语法格式如下:
re.compile(patten,[flags])
#patten:一个字符串形式的正则表达式
#flags:可选参数,re.M为多行模式;re.S表示匹配包括换行符在内的任意字符,等
例如:
import re
obj1=re.compile(r"\d+") #预加载模式正则表达式,匹配数字一次或多次
obj2=re.compile(r"\d{6}") #预加载模式正则表达式,匹配数字六次
str = "a1001010086"
result1 = obj1.findall(str)
result2 = obj2.findall(str)
print(result1)
print(result2)
运行结果如下:
['1001010086']
['100101']
2. re.match函数
re.match在正则中有讲过match()函数的匹配模式,该函数主要尝试从字符串的起始位置匹配,如果起始位置没有匹配成功,返回none,匹配成功则返回一个包含位置的元组类型的数据。
语法格式如下:
re.match(pattern,string,[flags])
#pattern:模式字符串
#string:要匹配的字符串
#flags:可选参数,表示标志位,用于控制匹配方式
例如:
import re #导入模块
pattern = re.compile(r'my_\w+') #模式字符串,匹配以my开头的字符串
string1 = 'MY__SCHOOL my_school' #要匹配的字符串1
string2 = '学校MY__SCHOOL my_school' #要匹配的字符串2
match1 = pattern.match(string1,re.I) #匹配字符串,不需分字母大小写
match2 = re.match(r'my_\w+',string1,re.I)
match3 = pattern.match(string1) #匹配字符串,需分字母大小写
match4 = re.match(r'my_\w+',string1)
match5 = pattern.match(string2,re.I) #匹配字符串,不需分字母大小写
match6 = re.match(r'my_\w+',string2,re.I)
print(match1)
print(match2)
print(match3)
print(match4)
print(match5)
print(match6)
运行结果如下:
None
<re.Match object; span=(0, 10), match='MY__SCHOOL'>
None
None
None
None
可以看到match1和match2的结果不同,我也不太清楚其中缘由(有大佬可以在评论区指点一下)
3. 其他函数
可以参考本博主的第4篇博文。