首页 > 其他分享 >正则表达式

正则表达式

时间:2023-09-25 20:12:22浏览次数:33  
标签:name 1996 正则表达式 text date print re

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

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

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

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

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

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

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

# 方法①
import os
import re

text = "工作邮箱是:[email protected],生活中经常使用邮箱 [email protected],个人邮箱:[email protected],工作顺利..."
# 使用正则表达式查找所有合法的邮件地址
email_addresses = re.findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b', text)
# 输出查找到的邮件地址
print("合法的邮件地址:", email_addresses)

# 方法①
import os
import re

text = "工作邮箱是:[email protected],生活中经常使用邮箱 [email protected],个人邮箱:[email protected],工作顺利..."
# 使用正则表达式查找所有合法的邮件地址
email_addresses = re.findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b', text)
# 输出查找到的邮件地址
print("合法的邮件地址:", email_addresses)

2. 网页中有一段字符串为:’sp>chl>个人信息 1811 * * * *589</h1><span>姓名:DingY,电话1871****111</span></p 使用正则表达式元成如下要求。

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

②提取其中所有的手机号

import re

# 定义字符串
s = 'p<h1>个人信息 18111234589</h1><span>姓名:DingY,电话187111001111</span></p'
# 获取<span>标签内的所有数据
info = re.search(r'(?<=<span>).*(?=</span>)', s)
print("span标签内的所有数据:")
print(info.group(0))
# 提取所有手机号码
phone = re.findall(r'1[34578]\d{9}', s, re.S)
print("所有的手机号码:", phone)

3、文档中有一个记事本文件,文件名为out_2021.03.24.txt,使用正则表达式读取文件名中的日期时间信息,并找出这一天是周几。将文件改名为out_YYYY-MM-DD-W.txt (其中YYYY:四位的年,MM:两位的月份,DD:两位的日,W:一位的周几,并假设周一为一周第一天)。

filename = "out_2021.03.24.txt"
# 匹配年月日信息
pattern = re.compile(r"out_(\d{4})\.(\d{2})\.(\d{2})\.txt")
match = pattern.match(filename)
if match:
# 获取年月日信息
year = match.group(1)
month = match.group(2)
day = match.group(3)
print("读取文件名中的日期时间信息:")
print(f"year: {year}, month: {month}, day: {day}")
# 计算这一天是周几
date = datetime.date(int(year), int(month), int(day))
print(f"weekday(这一天是周几): {date.strftime('%w')}")
# 构造新的文件名
new_filename = f"out_{year}-{month}-{day}-{date.strftime('%w')}.txt"
# 修改文件名,新的文件名将会替代原来的文件名,并保存在当前目录下
os.rename(filename, new_filename)
print("修改后的文件名将会保存到当前目录下")

其中YYYY:四位的年,MM:两位的月份,DD:两位的日,W:一位的周几,并假设周一为一周第一

修改后的文件名将会替换并保存到当前目录下out_YYYY-MM-DD-W.txt,

运行代码的时候把红色框框中文件删除再运行,否则会报错

输出日期的方法
# import os
# import re
# from datetime import datetime

# 定义文件名
# filename = "out_2021.03.24.txt"

# 使用正则表达式解析文件名中的日期时间信息
# result = re.match(r'out_(\d{4})\.(\d{2})\.(\d{2})\.txt', filename)

# 将解析后的年、月、日信息转换为 datetime 对象
# date = datetime.strptime(f"{result.group(1)}-{result.group(2)}-{result.group(3)}", "%Y-%m-%d")

# 输出这一天是周几
# print(date.strftime("%A"))

、已有文件内容如附件个人信息所示,请使用正则表达式实现如下要求:

①提取所有日期

②提取所有 1996 年以前出生的信息

③重新排版,日期规范为“yyyy年M月d日”

④把所有1996年以前出生的年份改为1996

⑤提取生日格式:张伟的生日是11月15号

 

import re

name_date = ""
with open('name-date.txt', encoding='UTF-8') as f:
for l in f:
name_date += "".join(l.split("\n")) + "\n"
date = re.findall("\d{4}[年.-]?\d{1,2}[月.-]?\d{1,2}\S?", name_date)
# print('所有日期:')
# print(date)

# 重新排版, 日期规范 为“yyy年M月d日”
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)
# print('\n重新排版后日期规范为:')
# print(formatted_dates)

# 提取所有 1996 年以前出生的学生
born_before_1996 = re.findall("\S+\s+1\d{2}[0-5][年.-]?\d{1,2}[月.-]?\d{1,2}\S?", name_date)
# print('\n1996年以前出生的信息:')
# print(born_before_1996)

# 把所有1996年以前出生的年份改为1996
birth_year_replace_pattern = re.compile(r'(19\d{2})年')
replaced_text = birth_year_replace_pattern.sub('1996年', name_date)
# print('\n把所有1996年以前出生的年份改为1996:')
# print(replaced_text)
# 提取生日格式
# ① 由于 name_date.txt没有"张伟的生日是11月15号“匹配不到,所以可以把原文本“ 张伟 1996.11.15””改为“ 张伟 1996.8.24”
pattern = r'(\w+)\s*:\s*(\d{4}).(\d{1,2}).(\d{1,2})'
match = re.search(pattern, '张伟: 1996.11.15')
if match:
[name, year, month, day] = match.groups()
# 转化为11月15日格式

birthday_str = f'{month}月{day}日'
# print('名字:', name)
# print('生日:', birthday_str)

# ② 可以直接创建文本内容 :text = "张伟的生日是11月15号"进行提取生日格式。
text = "张伟的生日是11月15号"
# 使用 findall() 方法搜索正则表达式的匹配项
matches = re.findall(r'(\d{1,2})月(\d{1,2})号', text)
# print('\n张伟的生日:')
# print(matches)

print('所有日期:')
print(date)
print('\n重新排版后日期规范为:')
print(formatted_dates)
print('\n1996年以前出生的信息:')
print(born_before_1996)
print('\n把所有1996年以前出生的年份改为1996:')
print(replaced_text)
print('名字:', name)
print('生日:', birthday_str)
print('\n张伟的生日:')
print(matches)
#@hfl

标签:name,1996,正则表达式,text,date,print,re
From: https://www.cnblogs.com/sunujie/p/17728759.html

相关文章

  • Bash-正则表达式
    一.正则表达式与通配符通配符:用来匹配符合条件的文件名(完全匹配),ls、find、cp这些命令不支持正则表达式,所以只能用通配符正则表达式:用来匹配符合条件的字符串(包含匹配),grep、awk、sed等命令支持正则表达式常用通配符:*(任意字符重复任意多次)、?、[]二.基础正则表达式*(匹配前一个......
  • Python 正则表达式
    正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。Python自1.5版本起增加了re模块,它提供Perl风格的正则表达式模式。re模块使Python语言拥有全部的正则表达式功能。compile函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象......
  • [leetcode] 10. 正则表达式匹配
    10.正则表达式匹配给你一个字符串s和一个字符规律p,请你来实现一个支持'.'和'*'的正则表达式匹配。'.'匹配任意单个字符'*'匹配零个或多个前面的那一个元素所谓匹配,是要涵盖整个字符串s的,而不是部分字符串。示例1:输入:s="aa",p="a"输出:false解释:"a"无......
  • 常用正则表达式
    一、校验数字的表达式数字:[1]*$n位的数字:^\d{n}$至少n位的数字:^\d{n,}$m-n位的数字:^\d{m,n}$零和非零开头的数字:^(0|[1-9][0-9]*)$非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$带1-2位小数的正数或负数:^(-)?\d+(.\d{1,2})$正数、负数、和小数:^(-|+)?\d......
  • 正则表达式
    正则表达式内容介绍1、字符组字符组是用于查找指定的字符,从左往右依次查找。通常来说,字符组中所有查找对象都是或的关系。符号说明[0123456789]匹配0到9任意一个数(全写)[0-9]匹配0到9任意一个数(缩写)[a-z]匹配26个小写英文字母[A-Z]匹配26个大写英文字......
  • 正则表达式知识点总结
    第一部分:正则表达式概念一个函数:re.findall(pattern,string)一些元字符:. * ? + [] () \ ^ $通过()来改变findall的行为 例1: 判断一个手机号码(长度、开头数字为1、只能是数字)importrea=12345678901defcheck_phone(phone):str_ph=str(pho......
  • Oracle正则表达式函数
    1、正则表达式中的元字符元字符意思例子\说明要匹配的字符是一个特殊字符、常量或者后者引用。(后引用重复上一次的匹配)\n匹配换行符\\匹配\\(匹配(\)匹配)^匹配字符串的开头位置如果A是字符串的第一个字符,^A匹配A$匹配字符串的末尾位置如果B是字符......
  • linux中正则表达式仅保留绝对路径的目录
     001、方法1[root@pc1test2]#lsa.txt[root@pc1test2]#cata.txt##测试文件/home/test2/a.txt[root@pc1test2]#sed-r's/(\/.*\/).*/\1/'a.txt##仅保留路径/home/test2/ ......
  • 关于正则表达式 g,m 参数的总结,为了回答“正则表达式(/[^0-9]/g,'')中的"/g"是什么意
    为了解答“正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?”这个问题,也为了能够便于大家对正则表达式有一个更为综合和深刻的认识,我将一些关键点和容易犯糊涂的地方再系统总结一下。 总结1:附件参数g的用法 表达式加上参数g之后,表明可以进行全局匹配,注意这里“可以”的含义。我们详......
  • 前端一些常用的正则表达式
    一、校验数字的表达式1数字:^[0-9]$2n位的数字:^\d{n}$3至少n位的数字:^\d{n,}$4m-n位的数字:^\d{m,n}$5零和非零开头的数字:^(0|[1-9][0-9]*)$6非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$7带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,......