100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 爬虫4-正则表达式及Python的re模块

爬虫4-正则表达式及Python的re模块

时间:2021-10-19 01:41:31

相关推荐

爬虫4-正则表达式及Python的re模块

正则表达式语法:

# -*- coding: utf-8 -*-

元字符:具有固定含义的特殊符号

常用元字符:(一般一次匹配一个字符)

. 匹配除换行符以外的任意字符

\w 匹配字母数字或下划线

\s 匹配任意的空白符

\n 匹配一个换行符

\t 匹配一个制表符

^ 匹配字符串的开始

$ 匹配字符串的结尾

\W 匹配非字符或数字或下划线

\D 匹配非数字

\S 匹配非空白符

a|b 匹配字符a或字符b

() 匹配括号内的表达式,也表示一个组

[...] 匹配字符组中的字符

[^...] 匹配除了字符组中字符的所有字符

量词:控制前面的元字符出现的次数

\d* 重复零次或更多次

+ 重复一次或更多次

? 重复零次或一次

{n} 重复n次

{n,} 重复n次或更多次

{n,m} 重复n到m次

贪婪匹配和惰性匹配

.* 贪婪匹配

.*? 惰性匹配 匹配最少

# -*- coding: utf-8 -*-"""Created on Tue Apr 20 23:10:49 @author: WLH"""import re# findall 匹配字符串中所有的符合正则的内容 返回的是列表'''lst = re.findall("\d+", "我的电话号是10086")print(lst) #['10086']lst = re.findall("\d+", "我的电话号是10086,我朋友电话号是10010")print(lst) #['10086', '10010']'''# finditer 匹配字符串中所有的内容 返回的是迭代器'''it = re.finditer("\d+", "我的电话号是10086,我朋友电话号是10010")# for i in it:#print(i)for i in it:print(i.group()) #输出结果# 10086# 10010'''# search 找到一个就返回 返回的结果是match对象,拿数据需要.group()'''s = re.search("\d+", "我的电话号是10086,我朋友电话号是10010")print(s.group()) #10086'''# match 是从头开始匹配'''s = re.match("\d+", "我的电话号是10086,我朋友电话号是10010")print(s) # 空s = re.match("\d+", "10086,我朋友电话号是10010")print(s) # 10086'''# 预加载正则表达式'''obj = pile("\d+")ret = obj.finditer("我的电话号是10086,我朋友电话号是10010")for i in ret:print(i.group())''''''输出结果:1008610010''''''ret = obj.findall("呵呵哒,我就不信你不还我100000000")print(ret)''''''输出结果:['100000000']'''s="""<div class='jay'><span id='1'>郭麒麟</span></div><div class='jj'><span id='2'>宋轶</span></div><div class='jolin'><span id='3'>大聪明</span></div><div class='sylar'><span id='4'>范思哲</span></div><div class='tory'><span id='5'>胡说八道</span></div>"""'''obj = pile("<div class='.*?'><span id='\d'>.*?</span></div>",re.S)#re.S能匹配换行符result = obj.finditer(s)for i in result:print(i.group())''''''obj = pile("<div class='.*?'><span id='\d'>(?P<wahaha>.*?)</span></div>",re.S)#re.S能匹配换行符result = obj.finditer(s)for i in result:print(i.group("wahaha"))'''obj = pile("<div class='.*?'><span id='(?P<id>\d')>(?P<wahaha>.*?)</span></div>",re.S)result = obj.finditer(s)for i in result:print(i.group("wahaha"))print(i.group("id"))

正则补充:

import repat = pile("AA") # AA为正则表达式 用来去验证其他的字符串# m = pat.search("CBA") # search 后的字符串 是被校验的内容# print(m)# m = pat.search("AACBAA") # search 后的字符串 是被校验的内容 只查找第一个# print(m)# m = re.search("AA","AASS") # 前面的字符串为规则 后面的为被校验的对象# print(m)# print(re.findall("a","ASDaDFGAa")) # 前面的字符串为规则 后面的为被校验的对象# print(re.findall("[A-Z]","ASDaDFGAa")) # 前面的字符串为规则 后面的为被校验的对象# sub 替换# print(re.sub("a","A","abcdcasd")) # 找到a用A代替 在第三个字符串中寻找a# 建议在正则表达式中,被比较的字符串中加上r,不要担心转义字符的问题a = r"\aaa-\'"print(a) # \aaa-\'

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。