最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

10 正则表达式应用

来源:博客园
name-date.txt 在文档最后

所有文件为:

1、使用正则表达式将如下文字中合法的邮件地址输出。

“工作邮箱是:abc@123.com,生活中经常使用邮箱 abc@.com,个人邮箱:Python@123.com,工作顺利...”


(资料图片仅供参考)

# 按照邮件地址的格式(用户名@域名.后缀)来编写正则表达式

# 该正则表达式中包含了四个部分:

# 1. 用户名:由一个或多个字母、数字、下划线、点、减号组成,且必须以字母或数字开头(用于描述用户名的部分用小括号括起来)

# 2. @符号:该部分只包含一个@符号

# 3. 域名:由一个或多个字母、数字、下划线、点组成,且必须以字母或数字开头(用于描述域名的部分用小括号括起来)

# 4. 后缀:由一个或多个字母组成,且必须以字母开头(用于描述后缀的部分用小括号括起来)

# 在线正则表达式测试 https://tool.oschina.net/regex/?optionGlobl=global(所有邮箱可参考这个网址到这个撒哈拉沙漠输入邮箱地址可以 。查找出所有合法正确的邮件地址)

1 # 方法①2 import os3 import re4 5 text = "工作邮箱是:abc@123.com,生活中经常使用邮箱 abc@.com,个人邮箱:Python@123.com,工作顺利..."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 = "工作邮箱是:abc@123.com,生活中经常使用邮箱 abc@.com,个人邮箱:Python@123.com,工作顺利..." 8 # 使用findall()函数在文本中搜索所有符合正则表达式模式的字符串 9 results = re.findall(pattern, text)10 # 输出所有匹配到的邮件地址11 for result in results:12     print(result)
2. 网页中有一段字符串为:’sp>chl>个人信息 1811 * * * *589
姓名:DingY,电话1871****111

①提取宇符串中标签里的内谷。

②提取其中所有的手机号。

1 import re 2  3 # 定义字符串 4 s = "p

个人信息 18111234589

姓名:DingY,电话187111001111标签内的所有数据 6 info = re.search(r"(?<=).*(?=)", 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年以前出生的年份改为199622 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日   

关键词: 正则表达式 用于描述 个人信息