“Python 语言程序设计实验2023春季”实验三 字符串与正则表达式

本文介绍了在Python中进行字符串处理和正则表达式的基础实验,包括转义字符、ASCII和UTF-8的应用,字符串操作函数如最长、最短子串及字符分析,以及正则表达式的语法、扩展和re模块的使用,涉及字符串加密解密、字符类型判断、文本分割和特定内容提取等技术。
摘要由CSDN通过智能技术生成

#实验三 字符串与正则表达式

##一、实验学时: 2学时

##二、实验目的

  1. 理解转义字符、ASCII、UTF-8的基本概念与应用;
  2. 掌握字符串常用方法。
  3. 掌握正则表达式基本语法;
  4. 理解正则表达式扩展语法;
  5. 掌握正则表达式模块re的常用函数;

##三、实验内容

通过编写函数实现下述各题。

  1. 输入一字符串,各个子串之间按空白字符隔开,分别显示其中最长、最短子串,以及最大、最小字符。

  2. 输入单个字符,判断并显示该字符是否为大写英文字母、小写英文字母、非英文文字字符、空格、数字或者其它字符。

  3. 输入一字符串,各个子串之间按空白字符隔开,要求将其中的纯英文子串的大写字母改为小写,含数字的子串中的阿拉伯数字改写为对应的汉字,并且将所有空白字符改写为’%'。

  4. 字符串加密与解密,输入一字符串,按如下规则加密,将原文中每个字符转
    换为对应的ascii码后,再将该ascii码加上一100至200之间的整数得到的数值即为
    该字符对应的密文;解密即为上述过程的逆运算。将该字符串加密后再解密,并且显示原文、密文、解密后文本。

  5. 输入一字符串,要求统计出该字符串中出现频率最高的字符。

  6. 令字符串 s=‘马丽于2022-4-29 10:10刊发了一首诗《Listen to me》,诗词的大意是:\n Mama you taught me to do the right things,\n So now you have to let your baby fly.\n You’ve given me everything that I will need,\n To make it through this crazy thing called life,\n Thank you Mum!’ ,

通过编写函数实现下述各题功能。

  • 1 应用正则表达式判断该字符串是否包含0~9的数字和大小写英文字母。

  • 2 根据正则表达式使用中文逗号、中文句号、英文逗号、英文点号、英文感叹
    号、英文换行符号将该字符串分割成多个子串。

  • 3 应用正则表达式提取该字符串中的日期时间字符串。

  • 4 应用正则表达式提取该字符串中的诗词名称。

  • 5 应用正则表达式提取该字符串中的姓名。

##四、实验结果

  1. 输入一字符串,各个子串之间按空白字符隔开,分别显示其中最长、最短子串,以及最大、最小字符。
#程序名:1.py
#功 能:输入一字符串,各个子串之间按空白字符隔开,分别显示其中最长、最短子串,以及最大、最小字符。
#作 者:*****************
#学 号:****************
#日 期:2022.03.28
#思 路:将输入的字符串用split()方法拆成多个子符串,用max()和min()方法求出最长子串和最短子串
#   将原字符串中间的空格删去,再用max()方法和min()方法求出最长字符和最短字符
a = input("请输入一串字符串:")#输入一串字符串
b = list(a.split())#将其用空格分隔并返回列表
a = a.replace(' ','')#将替换的方法将空格删除
print("最长子串:",max(b,key = len))
print("最短子串:",min(b,key = len))
print("最大字符:",max(a,key = ord))
print("最小字符:",min(a,key = ord))#用max,min的方法并将其结果输出

运行截图:

图片描述

  1. 输入单个字符,判断并显示该字符是否为大写英文字母、小写英文字母、非英文文字字符、空格、数字或者其它字符。
#程序名:2.py
#功 能:输入单个字符,判断并显示该字符是否为大写英文字母、小写英文字母、非英文文字字符、空格、数字或者其它字符。
#作 者:****************
#学 号:****************
#日 期:2022.03.28
#思 路:用if语句结合isupper(),islower(),isalpha(),isspace(),isdigit(),isalnum()判断输入的字符
x=input("请输入一个字符:")#输入一个字符
if x.isalpha():
  if x.isupper():
    print("这个字符为大写英文字符")
  if x.islower():
    print("这个字符为小写英文字符")#判断这个字符是否是大写或小写英文字符
else:
  print("这个字符为非英文文字字符")
  if x.isspace():
    print("这个字符为空格字符")
  elif x.isdigit():
    print("这个字符为数字字符")
  else:
    print("这个字符为其它字符")#判断这个字符是空格,数字还是其它字符

运行截图:

图片描述

  1. 输入一字符串,各个子串之间按空白字符隔开,要求将其中的纯英文子串的大写字母改为小写,含数字的子串中的阿拉伯数字改写为对应的汉字,并且将所有空白字符改写为’%'。
#程序名:3.py
#功 能:输入一字符串,各个子串之间按空白字符隔开,要求将其中的纯英文子
# 串的大写字母改为小写,含数字的子串中的阿拉伯数字改写为对应的汉字,并且将所有空白字符改写为'%'。
#作 者:****************
#学 号:****************
#日 期:2022.03.28
#思 路:用isalpha()结合lower()将其中的纯英文子串的大写字母改为小写
# 用maketrans()和translate将含数字的子串中的阿拉伯数字改写为对应的汉字
# 再将字符子串之间的空格转换为%并输出
table=''.maketrans('0123456789','零一二三四五六七八九')
a=[]
for i in input("请输入一个字符串").split():
    if i.isalpha():#判断这个字符串是否是纯英文字母
        i=i.lower()
    a.append(i.translate(table))#将字符串中的阿拉伯数字改写为对应的汉字
print(*a,sep='%')#将所有空白字符改写为'%'

运行截图:

图片描述

  1. 字符串加密与解密,输入一字符串,按如下规则加密,将原文中每个字符转换为对应的ascii码后,再将该ascii码加上一100至200之间的整数得到的数值即为该字符对应的密文;解密

即为上述过程的逆运算。将该字符串加密后再解密,并且显示原文、密文、解密后文本。

#程序名:4.py
#功 能:输入一字符串,将该字符串加密后再解密,并且显示原文、密文、解密后文本。
#作 者:****************
#学 号:****************
#日 期:2022.03.28
#思 路:用randint产生随机数,将原文中每个字符转换为对应的ascii码后,再将该ascii码加上一100至200之间
# 的整数得到的数值即为该字符对应的密文;解密即为上述过程的逆运算
import random#引入random模块
x = random.randint(-100,201)#产生随机数
lists = [*input("请输入原文:")]#字符串分割存入列表里
for i in range(len(lists)):#将每个字符进行加密
    lists[i] = ord(lists[i]) + x
print("密文为:",*lists,sep='')
for i in range(len(lists)):
    lists[i] = chr(lists[i] - x)#对每一个加密文进行解密
print('解密后文本为:',*lists,sep='')

运行截图:

图片描述

  1. 输入一字符串,要求统计出该字符串中出现频率最高的字符。
#程序名:5.py
#功 能:输入一字符串,要求统计出该字符串中出现频率最高的字符。
#作 者:****************
#学 号:****************
#日 期:2022.03.28
#思 路:将输入的字符串中的每一个字符存入字典中,统计每个字符出现的次数,
#     用max()方法找到键中最大的值,并输出键值对
x=input("请输入一个字符串")
dict={}#创建一个字典
for i in x:
    if i not in dict:#如果字典中不含有当前键值对则创建
        dict[i]=1
    else:
        dict[i]+=1#键对应值加一
temp=max(dict.values())#取字典中值中最大值
for u,v in dict.items():
    if v==temp:
        print("该字符串中出现频率最高的字符为:",u,"出现了:",v,"次")#查找这个最大值对应的键值对并输出

运行截图:

图片描述

令字符串 s='马丽于2022-4-29 10:10刊发了一首诗《Listen to me》,诗词的大意是:\n Mama you taught me to do the right things,\n So now you have to let your baby fly.\n You’ve

given me everything that I will need,\n To make it through this crazy thing called life,\n Thank you Mum!’ ,通过编写函数实现下述各题功能。

  • 1 应用正则表达式判断该字符串是否包含0~9的数字和大小写英文字母。
#程序名:6-1.py
#功 能:应用正则表达式判断该字符串是否包含0~9的数字和大小写英文字母。
#作 者:****************
#学 号:****************
#日 期:2022.03.28
#思 路:应用正则表达式和search()方法对字符串分别进行匹配,匹配成功则表明字符串包含0~9的数字和大小写英文字母
import re
s="马丽于2022-4-29 10:10刊发了一首诗《Listen to me》,诗词的大意是:\n Mama you taught me to do the right things,\n So now you have to let your baby fly.\n You've given me everything that I will need,\n To make it through this crazy thing called life,\n Thank you Mum!"
if re.search('[0-9]',s):#匹配字符串中是否含有数字
    print("字符串中包含0-9的数字")
if re.search('[a-z]',s):#匹配字符串中是否含有小写英文字符
    print("字符串中包含小写英文字母")
if re.search('[A-Z]',s):#匹配字符串中是否含有大写英文字符
    print("字符串中包含大写英文字母")

运行截图:

图片描述

  • 2 根据正则表达式使用中文逗号、中文句号、英文逗号、英文点号、英文感叹号、英文换行符号将该字符串分割成多个子串。
#程序名:6-2.py
#功 能:根据正则表达式使用中文逗号、中文句号、英文逗号、英文点号、英文感叹号、英文换行符号将该字符串分割成多个子串。
#作 者:****************
#学 号:****************
#日 期:2022.03.28
#思 路:用正则表达式和split()函数实现对字符串的分割
import re
s="马丽于2022-4-29 10:10刊发了一首诗《Listen to me》,诗词的大意是:" \
  "\n Mama you taught me to do the right things,\n So now you have" \
  " to let your baby fly.\n You've given me everything that I will need" \
  ",\n To make it through this crazy thing called life,\n Thank you Mum!"
print(re.split('[,|\.|,|。|!|\n]',s))#分割字符串

运行截图:

图片描述

  • 3 应用正则表达式提取该字符串中的日期时间字符串。
#程序名:6-3.py
#功 能:应用正则表达式提取该字符串中的日期时间字符串。
#作 者:****************
#学 号:****************
#日 期:2022.03.28
#思 路:应用正则表达式和search()方法提取该字符串中的日期时间字符串。
import re
s="马丽于2022-4-29 10:10刊发了一首诗《Listen to me》,诗词的大意是:" \
  "\n Mama you taught me to do the right things,\n So now you have to let your baby fly.\n You've given me everything that I will need,\n To make it through this crazy thing called life,\n Thank you Mum!"
a=re.search("(\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2})",s)#正则表达式匹配时间
print(a)#输出匹配结果

运行截图:

图片描述

  • 4 应用正则表达式提取该字符串中的诗词名称。
#程序名:6-4.py
#功 能:应用正则表达式提取该字符串中的诗词名称。
#作 者:****************
#学 号:****************
#日 期:2022.03.28
#思 路:应用正则表达式和search()方法提取该字符串中的诗词名称。
import re
s="马丽于2022-4-29 10:10刊发了一首诗《Listen to me》,诗词的大意是:\n Mama you taught me to do the right things,\n So now you have to let your baby fly.\n You've given me everything that I will need,\n To make it through this crazy thing called life,\n Thank you Mum!"
a = re.search('《[a-zA-Z]+\s[a-zA-Z]+\s[a-zA-Z]+》',s)#匹配符合条件的子串
print(a)

运行截图:
图片描述

  • 5 应用正则表达式提取该字符串中的姓名。
#程序名:6-5.py
#功 能:应用正则表达式提取该字符串中的姓名。
#作 者:****************
#学 号:****************
#日 期:2022.03.28
#思 路:应用正则表达式和search()方法提取该字符串中的姓名。
import re
s="马丽于2022-4-29 10:10刊发了一首诗《Listen to me》,诗词的大意是:\n Mama you taught me to do the right things,\n So now you have to let your baby fly.\n You've given me everything that I will need,\n To make it through this crazy thing called life,\n Thank you Mum!"
a = re.search('.+(?=于)',s)#匹配符合条件的子串
print(a)

运行截图:
图片描述
##五、实验小结

###问题与解决办法:

  1. 问题:编译出错,提示:SyntaxError: invalid syntax。

解决办法:判断语句的嵌套不能使用else if只能使用elif。

  1. 问题:不知道如何将获得的数字应以逗号分隔的顺序打印在一行上。

解决办法:可以对列表进行解包操作。

  1. 问题:运用re模块中的match函数进行字符串子串的匹配,发现答案为None 。

解决方法:改用search函数进行匹配子串。

  1. 问题:正则表达式不太熟悉 。

解决方法:查看书本和在CSDN上查找相关例子,并进行学习和理解。

###心得体会:

  1. 多翻阅Python书籍有利于对语法的进一步掌握。

  2. 我们应当养成自主学习的习惯,提高自己搜索信息的能力,利用好网络带给我们的便利。

  3. 有自己难以解决的问题,要积极向老师同学请教。

  4. Python学习需要不仅需要扎实的语法基础,还需要充足的实践。

  • 24
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值