name-date.txt 在文档最后
所有文件为:
1、使用正则表达式将如下文字中合法的邮件地址输出。
“工作邮箱是:[email protected],生活中经常使用邮箱 [email protected],个人邮箱:[email protected],工作顺利...”
# 按照邮件地址的格式(用户名@域名.后缀)来编写正则表达式
# 该正则表达式中包含了四个部分:
# 1. 用户名:由一个或多个字母、数字、下划线、点、减号组成,且必须以字母或数字开头(用于描述用户名的部分用小括号括起来)
# 2. @符号:该部分只包含一个@符号
# 3. 域名:由一个或多个字母、数字、下划线、点组成,且必须以字母或数字开头(用于描述域名的部分用小括号括起来)
# 4. 后缀:由一个或多个字母组成,且必须以字母开头(用于描述后缀的部分用小括号括起来)
# 在线正则表达式测试 https://tool.oschina.net/regex/?optionGlobl=global(所有邮箱可参考这个网址到这个撒哈拉沙漠输入邮箱地址可以 。查找出所有合法正确的邮件地址)
1 # 方法① 2 import os 3 import re 4 5 text = "工作邮箱是:[email protected],生活中经常使用邮箱 [email protected],个人邮箱:[email protected],工作顺利..." 6 # 使用正则表达式查找所有合法的邮件地址 7 email_addresses = re.findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b', text) 8 # 输出查找到的邮件地址 9 print("合法的邮件地址:", email_addresses)
1 # 方法② 2 import re 3 4 # 定义一个用于匹配邮件地址的正则表达式模式 5 pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b' 6 # 定义要搜索的文本 7 text = "工作邮箱是:[email protected],生活中经常使用邮箱 [email protected],个人邮箱:[email protected],工作顺利..." 8 # 使用findall()函数在文本中搜索所有符合正则表达式模式的字符串 9 results = re.findall(pattern, text) 10 # 输出所有匹配到的邮件地址 11 for result in results: 12 print(result)
2. 网页中有一段字符串为:’sp>chl>个人信息 1811 * * * *589</h1><span>姓名:DingY,电话1871****111</span></p 使用正则表达式元成如下要求。
①提取宇符串中<span>标签里的内谷。
②提取其中所有的手机号。
1 import re 2 3 # 定义字符串 4 s = 'p<h1>个人信息 18111234589</h1><span>姓名:DingY,电话187111001111</span></p' 5 # 获取<span>标签内的所有数据 6 info = re.search(r'(?<=<span>).*(?=</span>)', s) 7 print("span标签内的所有数据:") 8 print(info.group(0)) 9 # 提取所有手机号码 10 phone = re.findall(r'1[34578]\d{9}', s, re.S) 11 print("所有的手机号码:", phone)
3、文档中有一个记事本文件,文件名为out_2021.03.24.txt,使用正则表达式读取文件名中的日期时间信息,并找出这一天是周几。将文件改名为out_YYYY-MM-DD-W.txt (其中YYYY:四位的年,MM:两位的月份,DD:两位的日,W:一位的周几,并假设周一为一周第一天)。
1 filename = "out_2021.03.24.txt" 2 # 匹配年月日信息 3 pattern = re.compile(r"out_(\d{4})\.(\d{2})\.(\d{2})\.txt") 4 match = pattern.match(filename) 5 if match: 6 # 获取年月日信息 7 year = match.group(1) 8 month = match.group(2) 9 day = match.group(3) 10 print("读取文件名中的日期时间信息:") 11 print(f"year: {year}, month: {month}, day: {day}") 12 # 计算这一天是周几 13 date = datetime.date(int(year), int(month), int(day)) 14 print(f"weekday(这一天是周几): {date.strftime('%w')}") 15 # 构造新的文件名 16 new_filename = f"out_{year}-{month}-{day}-{date.strftime('%w')}.txt" 17 # 修改文件名,新的文件名将会替代原来的文件名,并保存在当前目录下 18 os.rename(filename, new_filename) 19 print("修改后的文件名将会保存到当前目录下")
注意:先创建文件名为out_2021.03.24.txt文件
其中YYYY:四位的年,MM:两位的月份,DD:两位的日,W:一位的周几,并假设周一为一周第一
修改后的文件名将会替换并保存到当前目录下out_YYYY-MM-DD-W.txt,
运行代码的时候把红色框框中文件删除再运行,否则会报错
运行结果
输出日期的方法1 输出日期的方法 2 # import os 3 # import re 4 # from datetime import datetime 5 6 # 定义文件名 7 # filename = "out_2021.03.24.txt" 8 9 # 使用正则表达式解析文件名中的日期时间信息 10 # result = re.match(r'out_(\d{4})\.(\d{2})\.(\d{2})\.txt', filename) 11 12 # 将解析后的年、月、日信息转换为 datetime 对象 13 # date = datetime.strptime(f"{result.group(1)}-{result.group(2)}-{result.group(3)}", "%Y-%m-%d") 14 15 # 输出这一天是周几 16 # print(date.strftime("%A"))
4、已有文件内容如附件个人信息所示,请使用正则表达式实现如下要求:
①提取所有日期
②提取所有 1996 年以前出生的信息
③重新排版,日期规范为“yyyy年M月d日”
④把所有1996年以前出生的年份改为1996
⑤提取生日格式:张伟的生日是11月15号
1 import re 2 3 name_date = "" 4 with open('name-date.txt', encoding='UTF-8') as f: 5 for l in f: 6 name_date += "".join(l.split("\n")) + "\n" 7 date = re.findall("\d{4}[年.-]?\d{1,2}[月.-]?\d{1,2}\S?", name_date) 8 # print('所有日期:') 9 # print(date) 10 11 # 重新排版, 日期规范 为“yyy年M月d日” 12 formatted_dates = re.sub("\s*(\S+)\s+(\d{4})[年.-]?(\d{1,2})[月.-]?(\d{1,2})\S?", r"\1 \t \2年\3日\4日\n", name_date) 13 # print('\n重新排版后日期规范为:') 14 # print(formatted_dates) 15 16 # 提取所有 1996 年以前出生的学生 17 born_before_1996 = re.findall("\S+\s+1\d{2}[0-5][年.-]?\d{1,2}[月.-]?\d{1,2}\S?", name_date) 18 # print('\n1996年以前出生的信息:') 19 # print(born_before_1996) 20 21 # 把所有1996年以前出生的年份改为1996 22 birth_year_replace_pattern = re.compile(r'(19\d{2})年') 23 replaced_text = birth_year_replace_pattern.sub('1996年', name_date) 24 # print('\n把所有1996年以前出生的年份改为1996:') 25 # print(replaced_text) 26 # 提取生日格式 27 # ① 由于 name_date.txt没有"张伟的生日是11月15号“匹配不到,所以可以把原文本“ 张伟 1996.11.15””改为“ 张伟 1996.8.24” 28 pattern = r'(\w+)\s*:\s*(\d{4}).(\d{1,2}).(\d{1,2})' 29 match = re.search(pattern, '张伟: 1996.11.15') 30 if match: 31 [name, year, month, day] = match.groups() 32 # 转化为11月15日格式 33 34 birthday_str = f'{month}月{day}日' 35 # print('名字:', name) 36 # print('生日:', birthday_str) 37 38 # ② 可以直接创建文本内容 :text = "张伟的生日是11月15号"进行提取生日格式。 39 text = "张伟的生日是11月15号" 40 # 使用 findall() 方法搜索正则表达式的匹配项 41 matches = re.findall(r'(\d{1,2})月(\d{1,2})号', text) 42 # print('\n张伟的生日:') 43 # print(matches) 44 45 print('所有日期:') 46 print(date) 47 print('\n重新排版后日期规范为:') 48 print(formatted_dates) 49 print('\n1996年以前出生的信息:') 50 print(born_before_1996) 51 print('\n把所有1996年以前出生的年份改为1996:') 52 print(replaced_text) 53 print('名字:', name) 54 print('生日:', birthday_str) 55 print('\n张伟的生日:') 56 print(matches) 57 #@hfl
输出结果为: 所有日期: ['1996.11.15', '1993年10月21日', '1996年07月24日', '1996.3.21', '1996.12.0', '1996年07月05日', '1996.1.28', '1996年02月24日', '1996.5.28', '1996.10.26', '1993年1月6日', '1996.5.21', '1996年05月01日', '1996年04月14日', '1996.8.13', '1998年1月5日', '1996年08月21日', '1996年03月07日', '1996年03月18日', '1996年12月18日', '1995年5月7日'] 重新排版后日期规范为: 张伟 1996年11日15日 王伟 1993年10日21日 王芳 1996年07日24日 李伟 1996年3日21日 王秀英 1996年12日0日 李秀英 1996年07日05日 李娜 1996年1日28日 张秀英 1996年02日24日 刘伟 1996年5日28日 张敏 1996年10日26日 李静 1993年1日6日 张丽 1996年5日21日 王静 1996年05日01日 王丽 1996年04日14日 李强 1996年8日13日 张静 1998年1日5日 李敏 1996年08日21日 王敏 1996年03日07日 王磊 1996年03日18日 李军 1996年12日18日 刘洋 1995年5日7日 1996年以前出生的信息: ['王伟 1993年10月21日', '李静 1993年1月6日', '刘洋 1995年5月7日'] 把所有1996年以前出生的年份改为1996: 张伟 1996.11.15 王伟 1996年10月21日 王芳 1996年07月24日 李伟 1996.3.21 王秀英 1996.12.0 李秀英 1996年07月05日 李娜 1996.1.28 张秀英 1996年02月24日 刘伟 1996.5.28 张敏 1996.10.26 李静 1996年1月6日 张丽 1996.5.21 王静 1996年05月01日 王丽 1996年04月14日 李强 1996.8.13 张静 1996年1月5日 李敏 1996年08月21日 王敏 1996年03月07日 王磊 1996年03月18日 李军 1996年12月18日 刘洋 1996年5月7日 名字: 张伟 生日: 11月15日 张伟的生日: [('11', '15')]
name-date.txt
张伟 1996.11.15 王伟 1993年10月21日 王芳 1996年07月24日 李伟 1996.3.21 王秀英 1996.12.0 李秀英 1996年07月05日 李娜 1996.1.28 张秀英 1996年02月24日 刘伟 1996.5.28 张敏 1996.10.26 李静 1993年1月6日 张丽 1996.5.21 王静 1996年05月01日 王丽 1996年04月14日 李强 1996.8.13 张静 1998年1月5日 李敏 1996年08月21日 王敏 1996年03月07日 王磊 1996年03月18日 李军 1996年12月18日 刘洋 1995年5月7日
标签:10,15,21,1996,正则表达式,date,应用,print,re From: https://www.cnblogs.com/huangfeilonghfl/p/17093500.html