python入门实例——正则表达式和函数的使用

218 篇文章 7 订阅
207 篇文章 6 订阅
本文通过三个实例展示了Python编程中正则表达式的应用,包括递归网页链接的数字求和、文件数据处理及统计电话号码、手机号和邮箱数量。涉及BeautifulSoup库、numpy库和正则表达式,适合初学者巩固基础。
摘要由CSDN通过智能技术生成

喜欢编程,热爱分享,希望能结交更多志同道合的朋友,一起在学习Python的道路上走得更远!有不懂的问题可以私聊我哦!

本文介绍了三个正则表达式和函数的使用的实例,有兴趣的朋友们可以仔细看看!

python入门实例——正则表达式和函数的使用

第一题

用你学号的3位尾数作为访问http:// 125.220. 66. 143/学号三位. html例如你是10000031, 则访问http://125. 220. 66. 143/31. html 0被 动略过.你会发现一个数字,和一个链接。点击这个链接,又会发现一个链接。如此这样n次后,你会发现一个网页没有链接,并且出现Thus_ is the end的字样。求这些不同页面出现数的和

注意:本题采用本地打开html文件的方式

from bs4 import BeautifulSoupimport rewith open('E:/findsum/142.html', 'r')
as wb_data: 
#用jupytor Notebook打开本地网页文件 
Soup = BeautifulSoup(wb_data, 'html') 
#解析为网页格式 
t=Soup.decode("GBK") 
#解析对应的字符 
#print(t) pat="\d+"  number=re.findall(pat,t)[0] 
#读取下一个地址的网页数字  
s=0 while 1: 
#循环直到不存在跳转页面为止 
s+=eval(number) 
#(正则表达式找到的都是字符串,所以要强制转化为数字) 
str1="E:/findsum/"+number+".html" 
#重新定义页面,循环操作 
with open(str1, 'r')
as wb_data:  Soup = BeautifulSoup(wb_data, 'html')  t=Soup.decode("GBK")  
pat="\d+"  number=re.findall(pat,t)[0] 
if number=="0000": 
#最后0000页面表示结束,结束后跳出,防止报错 
break
print("求和的结果为")
print(s)

第二题

从文件读取数据,文件内容为38, 399, 229,2, 23, 22, 3434, 344,可以自己设计这个文件,用逗号为分隔符。

编写个函数,返回值为一个元组,包括了文件中所有数据和所有数据的积,所有数据的平均值和方差这四个数据

#定义一个函数求所有元素之积def fun(list2):
 s=1 for i in list2: s*=i  
return sx=open("G:/临时文件/text1.txt","r").read()
#读取文件list0=[]list1=x.split(",") 
#去除逗号list2=list(map(int,list1)) 
#解包列表(将列表中的字符串元素全部变成int型元素)print("列表为:",list2)
import numpy as npprint("所有数据和为",np.sum(list2))
print("所有数据的积为",fun(list2))
print("所有数据的平均值为",np.mean(list2))
print("方差为",np.var(list2))
list0.append(np.sum(list2))
list0.append(fun(list2))
list0.append(np.mean(list2))
list0.append(np.var(list2))
print("所求的元组为",tuple(list0))
#最后转换元组

第三题

统计有多少个不同的座机电话号码多少不同的手机号码, 多少个不同的电子邮件?然后写入一个文件数字为座机号码数里 手机号码数里电子邮件数量+学号的立方做为结果

import numpy as npimport res=open("G:/临时文件/complex.txt","r").read() 
#读文件:open("路径","r").read() 
#写文件:open("路径","w").write()pat="\d{4}-\d{7}"pat1="\d{3}-\d{8}"x=set(re.findall(pat,s)).union(set(re.findall(pat1,s))) #union集合合并pat2="\d{11}" 
#十一位数的字符串 {}内表示符号的个数y=set(re.findall(pat2,s)) 
#set去重pat3="\w+@+\w+\.+\w" 
#\w表示数字、字母、下划线等常规字符
#pat4='[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+'z=set(re.findall(pat3,s))
a=len(x)
b=len(y)
c=len(z)
p=1750300142
d=a*b*c+p**3
print("座机电话号码数目为",a)
print("手机号数目为",b)
print("邮箱数目为",c)
print("结果为",d)

觉得文章还不错的话不妨收藏起来慢慢看,有任何建议或看法欢迎大家在评论区分享讨论!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值