正则作业题

# re模块的常用方法
    # findall(正则,待匹配字符串,flag) :  返回所有匹配项的列表
    # search : 返回一个变量,通过group取到的是第一个匹配的项
    # finditer :返回一个迭代器,通过迭代取到的是一个变量,通过group取值
    # match : 从头开始找第一个,其他和search一样

    # compile(正则):同一个正则表达式需要多次使用的时候提前编译来节省时间

    # split 通过正则表达式匹配的内容进行分割
    # sub 替换,通过正则表达式匹配的内容来进行替换
    # subn 替换,在sub的基础上,返回一个元组,第一个内容是替换结果,第二个是替换次数

# 标签匹配
# <h1>aksfgi031oq3h</h1><h2>sdhyqo-120v b,</h2>
import re
ret=re.findall('<\w+>(.*?)</\w+>',exp)
print(ret)

ret=re.search(r'<(?P<name>\w+)>(.*?)</\1>',exp)
ret=re.search(r'<(?P<name>\w+)>(.*?)</(?P=name)>',exp)
print(ret.group(2))




# 用户输入身份证号匹配
 re.match('^[1-9]\d{14}(\d{2}[\dx])?$',ident_num)
 ^([1-9]\d{16}[\dx]|[1-9]\d{14})$


# 分组命名 取消分组优先
# (?P<组名>正则)  (?P=组名)  (?:正则)


# 2、匹配年月日日期 格式2018.12.16
ret=re.findall('[1-9]\d{3}\.(?:1[0-2]|0?[1-9])\.(?:[12]\d|3[01]|0?[1-9])','2018-01-01')

# [1-9]\d{3}-(1[0-2]|0?[1-9])-([12]\d|3[01]|0?[1-9])
# [1-9]\d{3}-(1[0-2]|0?[1-9])-([12]\d|3[01]|0?[1-9])
# [1-9]\d{3}(?P<sub>[^\d])(1[0-2]|0?[1-9])(?P=sub)([12]\d|3[01]|0?[1-9])

# 7、匹配邮箱地址
# 邮箱规则
# @之前必须有内容且只能是字母(大小写)、数字、下划线(_)、减号(-)、点(.)
# @和最后一个点(.)之间必须有内容且只能是字母(大小写)、数字、点(.)、减号(-),且两个@点不能挨着
# 最后一个点(.)之后必须有内容且内容只能是字母(大小写)、数字且长度为大于等于2个字节,小于等于6个字节

^[a-zA-Z][-\w.]*@([-\da-zA-Z]+\.)[a-zA-Z\d]{2,6}
# taibai@oldboy.cn
# [-\w.]+@([-\da-zA-Z]+\.)+[a-zA-Z\d]{2,6}

# 8、从类似

# exp ='''<a>wahaha</a><b>banana</b><h1>qqxing</h1>'''

ret=re.findall(r'<\w+>(.*?)</\w+>',exp)
print(ret)

# 这样的字符串中,
# 1)匹配出wahaha,banana,qqxing内容。
# import re
# re.findall('<\w+>(.+?)</\w+>',exp)
# 2)匹配出a,b,h1这样的内容

ret=re.findall(r'<(\w+)>.*?</\1>',exp)



# import re
#ret = re.finditer(r'<(\w+)>.+?</\1>',exp)
# print([i.group(1) for i in ret])


# 9、1-2*((60-30+(-40/5)(9-25/3+7/399/42998+10568/14))-(-43)/(16-3*2))
# 1)从上面算式中匹配出最内层小括号以及小括号内的表达式

# \([^()]+\)
\([^()]*?\)

# 10、从类似9-25/3+7/399/42998+10568/14的表达式中匹配出从左到右第一个乘法或除法
# \d+(\.\d+)?[*/]-?\d+(\.\d+)?

\d+[*/]\d+

\d+([*/]\d+[*/]|[*/])\d+

加上小数
\d+(\.\d+)?([*/]\d+(\.\d+)?[*/]|[*/])\d+(\.\d+)?


# 11
# 从lianjia.html(html文件在群文件中)中匹配出标题,户型和面积,结果如下:
# [('金台路交通部部委楼南北大三居带客厅 单位自持物业', '3室1厅', '91.22平米'), ('西山枫林 高楼层南向两居 户型方正 采光好', '2室1厅', '94.14平米')]
# par = '<div class="title">.*?<a class=.*?>(?P<name>.*?)</a>.*?<span class="divide">/</span>(?P<room>.*?)<span class="divide">/</span>(?P<area>.*?)<span'
# import re
# with open('lianjia.html',encoding='utf-8') as f:
#     content = f.read()
# ret = re.findall(par,content,flags=re.S)
# print(ret)

# ret = re.finditer(par,content,flags=re.S)
# for i in ret:
#     print(i.group('name'),i.group('room'),i.group('area'))

<div class="info clear"><div class="title"><a class="" href="https://zz.lianjia.com/ershoufang/104103613626.html" target="_blank" data-log_index="2" data-el="ershoufang" data-housecode="104103613626" data-is_focus="" data-sl="">田园新城 1室0厅 52万</a><!-- 拆分标签 只留一个优先级最高的标签--><span class="goodhouse_tag tagBlock">必看好房</span></div><div class="flood"><div class="positionInfo"><span class="positionIcon"></span><a href="https://zz.lianjia.com/xiaoqu/3311053575031/" target="_blank" data-log_index="2" data-el="region">田园新城 </a>   -  <a href="https://zz.lianjia.com/ershoufang/suolinglubeiduan/" target="_blank">索凌路北段</a> </div></div><div class="address"><div class="houseInfo"><span class="houseIcon"></span>1室0厅 | 42平米 | 东 | 精装 | 中楼层(共10层)  | 板楼</div></div><div class="followInfo"><span class="starIcon"></span>3人关注 / 21天以前发布</div><div class="tag"></div><div class="priceInfo"><div class="totalPrice"><span>52</span>万</div><div class="unitPrice" data-hid="104103613626" data-rid="3311053575031" data-price="12381"><span>单价12381元/平米</span></div></div></div>


import re
with open('aaa.html',encoding='utf-8') as f:
    ret=f.read()
c=re.compile('<div class=.*?><div class=.*?><.*?>(?P<name>.*?)</a><.*?><span class=.*?>(?P<leixing>.*?)</span></div><div class=.*?><div class=.*?><span class=.*?></span><a href.*?>(?P<quyu>.*?)</a>.*?>(.*?)</a> </div></div><div class=.*?><div class="houseInfo"><span class="houseIcon"></span>(.*?)',flags=re.S)
cet=re.search(c,ret)
print(cet.group(1))
print(cet.group(2))
print(cet.group(3))
print(cet.group(4))
print(cet.group(5))


田园新城 1室0厅 52万
必看好房
田园新城 
索凌路北段
posted @ 2020-03-09 13:19  小丁变优秀  阅读(148)  评论(0)    收藏  举报