Python 实验五 字符串与正则表达式

news2024/11/29 4:45:48

1.输入一个字符串,将该字符串中下标为偶数的字符组成新串并通过字符串格式化方式显示。

a = input("请输入一个字符串:")
b =a[1::2]
print("老串为:%a,新串为:%a"%(a,b))

在这里插入图片描述
2.编写程序,生成一个由15个不重复的大小写字母组成的列表。

import random
import string
list = []
while len(list) <= 15:
    a = random.choice(string.ascii_letters)
    if a not in list:
        list.append(a)
print("15个不重复的大小写字母组成的列表为:",list)

在这里插入图片描述
3.给定字符串"site sea suede sweet see kase sse ssee loses",匹配出所有以s开头、e结尾的单词。

import re
a = 'site sea suede sweet see kase sse ssee loses'
b = re.findall(r's[^0-9]e',a)
print("所有以s开头,e结尾的单词为:",b)

在这里插入图片描述
4.生成15个包括10个字符的随机密码,密码中的字符只能由大小写字母、数字和特殊字符“@”“$”“#”“&”“_”“~”构成。

import string
import random
a = string.ascii_letters + string.digits + "@$#&_~"
for i in range(15):
    b = "".join([random.choice(a) for i in range(10)])
    print("随机密码"+str(i+1)+":",end=" ")
    print(b,end=" ")
    print()

在这里插入图片描述
5.给定列表x=[“13915556234”,“13025621456”,“15325645124”,“15202362459”],检查列表中的元素是否为移动手机号码,这里移动手机号码的规则是:手机号码共11位数字;以13开头,后面跟4、5、6、7、8、9中的某一个;或者以15开头,后面跟0、1、2、8、9中的某一个。

import re
x=["13915556234", "13025621456", "15325645124", "15202362459"]
a=r'^(13[4-9]\d{8})|(15[01289]\d{8})$'
print("符合这里移动手机号码规则的是:")
for i in x:
    if re.findall(a,i):
        print(i)

在这里插入图片描述
【实验总结】
1.字符串编码
(1)Python3支持两种类型字符串:str类型(支持Unicode编码)和bytes类型,而且str类型和bytes类型可以相互转换。
(2)通过help(str),发现str类里有一个encode()方法。str类型的字符串可以通过该方法编码成为bytes类型的字符串。通过help(bytes),发现bytes类恰好有个decode()方法。bytes类型的字符串可以通过该方法解码成为str类型的字符串。另外,我们还会发现str类和bytes类拥有几乎一模一样的方法列表,除了encode()和decode()。
(3)可以使用bytes(string, encoding[, errors]) 和str(bytes_or_buffer[, encoding[, errors]])完成两种类型的相互转换。
(4)Python3.x完全支持中文字符,解析器默认采用 UTF-8解析源程序,无论是数字字符、英文字母、汉字都按一个字符来对待和处理。
(5)在Python3.x中可以使用中文作为标识符。
2. 字符串构造
(1)单引号或双引号构造字符串
在用单引号或双引号构造字符串时,要求引号成对出现。
如:‘Python World!’、‘ABC’、“what is your name?”,都是构造字符串的方法。
‘string"在Python中不是一个合法的字符串。
(2)单双引号构造字符串的特殊用法
如果代码中的字符串包含了单引号,且不用转义字符,那么整个字符串就要用双引号来构造,否则就会出错。
如果代码中的字符串包含了双引号,且不用转义字符,那么整个字符串要用单引号来构造。
(3)字符串中引号的转义
转义字符以“\”开头,后接某些特定的字符或数字。
(4)三重引号字符串
三重引号字符串是一种特殊的用法。三重引号将保留所有字符串的格式信息。如字符串跨越多行,行与行之间的回车符、引号、制表符或者其他任何信息,都将保存下来。在三重引号中可以自由的使用单引号和双引号。
3. 字符串格式化
(1)%符号格式化字符串
字符串格式化涉及到两个概念:格式和格式化,其中格式以%开头,格式化运算符用%表示用对象代替格式串中的格式,最终得到1个字符串。
① 字符串格式的书写
[ ]中的内容可以省略;
简单的格式是%加格式字符,如%f、%d、%c等;
当最小宽度及精度都出现时,它们之间不能有空格,格式字符和其他选项之间也不能有空格,如%8.2f。
②最小宽度和精度
最小宽度是转换后的值所保留的最小字符个数。
精度(对于数字来说)则是结果中应该包含的小数位数。
③进位制和科学计数法
把一个数转换成不同的进位制,也可按科学计数法进行转换。
(2)format()方法格式化字符串
format()方法是通过{}和:来代替传统%方式。
format方法格式化时,可以使用位置参数,根据位置来传递参数;也可以通过索引值来引用位置参数,只要format方法相应位置上有参数值即可,参数索引从0开始;也可以使用序列,通过format方法中序列参数的位置索引和序列中元素索引来引用相应值;也可以用“*序列名称”的形式作为format方法的参数,通过位置依次将序列中的元素传递到目标字符串中。
可以使用关键参数的形式,也可用“**字典名”的形式将字典中的元素作为参数。
(3)Formatted String Literals格式化字符串
带’f’前缀,类似于format()方法格式化字符串。
4. 字符串截取
字符串的截取就是取出字符串中的子串。截取有两种方法:一种是索引str[index]取出单个字符;另一种是切片str[[start]:[end]:[step]]取出一片字符。切片方式与列表部分介绍的一样。
字符串中字符的索引跟列表一样,可以双向索引。
5. 字符串常用方法
(1)center()、ljust()、rjust()
格式:
center(self, width, fillchar=’ ‘, /)
ljust(self, width, fillchar=’ ‘, /)
rjust(self, width, fillchar=’ ', /)
说明:
width:指定宽度;
fillchar:填充的字符,默认为空格。
功能:
返回一个宽度为width的新字符串,原字符串居中(左对齐或右对齐)出现在新字符串中,如果width大于字符串长度,则使用fillchar进行填充。
(2)lower()、upper()
lower()方法将大写字母转换为小写字母,其他字符不变,并返回新字符串。upper()方法将小写字母转换为大写字母,其他字符不变,并返回新字符串。经常用这两种方法解决有关不区分大小写问题。
(3)capitalize()、title()、swapcase()
capitalize()方法将字符串首字母转换为大写形式,其他字母转换为小写形式。title()方法将每个单词的首字母转换为大写形式,其他部分的字母转换为小写形式。swapcase()字符将大小写互换。均返回新字符串,原字符串对象不做任何修改。
(4)islower()、isupper()、isdigit()
功能:测试字符串是否为小写、大写、数字。如果是,则返回True;否则返回False。
(5)find()、rfind()
格式:
S.find(sub[, start[, end]])
S.rfind(sub[, start[, end]])
说明:
sub:字符串(子串);
start:开始位置;
end:结束位置。查找范围start开始,end结束,不包括end。
功能:
在一个较长的字符串S中,在[start,end)范围内查找并返回子串sub首次出现的位置索引,如果没有找到则返回-1。默认范围是整个字符串。其中find()方法从左往右查找,rfind()方法从右往左查找。
(6)index()、rindex()
格式:
S.index(sub[, start[, end]])
S.rindex(sub[, start[, end]])
功能:
在一个较长的字符串S中,查找并返回在[start,end)范围内子串sub首次出现的位置索引,如果不存在则抛出异常。默认范围是整个字符串。其中index()方法从左往右查找,rindex()方法从右往左查找。
(7)count()
格式:S.count(sub[, start[, end]])
功能:在一个较长的字符串S中,查找并返回[start,end)范围内子串sub出现的次数,如果不存在则返回0。默认范围是整个字符串。
(8)split()
功能:以指定字符为分隔符,从左往右将字符串分割开来,并将分割后的结果组成列表返回。
如果字符串中的某种字符出现0次或多次,可以利用split()方法,根据该字符把字符串分离成多个子串组成的列表。
(9)join()
join()方法可用来连接序列中的元素,并在两个元素之间插入指定字符,返回一个字符串。
(10)replace()
replace(old,new,count=-1)方法查找字符串中old子串并用new子串来替换。参数count默认值为-1,表示替换所有匹配项,否则最多替换count次。返回替换后的新字符串。
(11)maketrans()、translate()
maketrans()方法生成字符映射表,translate()方法是根据字符映射表替换字符。这两种方法联合起来使用可以一次替换多个字符。
(12)strip()
strip()方法去除字符串两侧的空白字符或指定字符,并返回新字符串。
6. 字符串string模块
字符串string模块定义了Formatter类、Template类、capwords函数和常量,熟悉string模块可以简化某些字符串的操作。
7.正则表达式
正则表达式是一个特殊的字符序列,利用事先定义好的一些特定字符以及它们的组合组成一个“规则”,检查一个字符串是否与这种规则匹配来实现对字符的过滤或匹配。正则表达式是字符串处理的有力工具,但是并不是Python独有的,其他语言也有。
Python中,re模块提供了正则表达式操作所需要的功能。
大多数字母和字符一般都会和自身匹配。如果在字符串前面加了r,表示对字符串不进行转义。有些字符比较特殊,它们和自身并不匹配,而是表明应和一些特殊的东西匹配,或者会影响重复次数。这些特殊的字符我们称之为元字符。
re模块中findall()方法以列表的形式返回所有能匹配的子串,如果没有找到匹配的,则返回空列表。
正则表达式元字符:
① “.”:表示除换行符以外的任意字符
与“.”类似(但不相同)的一个符号是“\S”,表示不是空白符的任意字符。注意是大写字符S。
②“[]”:指定字符集
常用来指定一个字符集,例如:[abc]、[a-z]、[0-9];
元字符在方括号中不起作用,例如:[akm$][m.]中元字符都不起作用;
方括号内的“^”表示补集,匹配不在区间范围内的字符,例如:[^3]表示除3以外的字符。
“^”:匹配行首,匹配以^后面的字符开头的字符串
“$”:匹配行尾,匹配以$之前的字符结束的字符串
“\”:反斜杠后面可以加不同的字符以表示不同的特殊意义
\b匹配单词头或单词尾;
\B与\b相反,匹配非单词头或单词尾;
\d匹配任何十进制数;相当于[0-9];
\D与\d相反,匹配任何非数字字符,相当于[^0-9];
\s匹配任何空白字符,相当于[\t\n\r\f\v];
\S与\s相反,匹配任何非空白字符,相当于[^\t\n\r\f\v];
\w匹配任何字母、数字或下画线字符,相当于[a-zA-Z0-9_];
\W与\w相反,匹配任何非字母、数字和下画线字符,相当于[^a-zA-Z0-9_];
也可以用于取消所有的元字符:\、[。
这些特殊字符都可以包含在[]中。如:[\s,.]将匹配任何空白字符、“,“或”.”。
⑥“”:匹配位于之前的字符或子模式的0次或多次出现
⑦“+”:匹配位于+之前的字符或子模式的1次或多次出现
⑧“?”:匹配位于?之前的0个或1个字符
⑨“{m,n}”:表示至少有m个重复,至多有n个重复。m,n均为十进制数
忽略m表示0个重复,忽略n表示无穷多个重复。
{0,}等同于*;{1,}等同于+;{0,1}与?相同。但是如果可以的话,最好使用*、+、或?。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/528356.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LInux系统下使用git的三板斧以及报错处理

LInux使用git 我们应该知道git是什么东西&#xff0c;还有git的三板斧&#xff0c;git是一个工具&#xff0c;使用git来将文件上传到代码仓库 文章目录 LInux使用gitcloneaddcommitpush查看当前git的状态 clone 第一步找到你创建的仓库&#xff0c;然后复制http地址&#xf…

目前可以用的ChatGPT网址大全

ChatGPT是一个基于人工智能的聊天机器人&#xff0c;可以与用户进行自然语言交互。它可以回答各种问题&#xff0c;提供有用的信息和建议&#xff0c;还可以进行闲聊和娱乐。ChatGPT使用最先进的自然语言处理技术&#xff0c;可以理解和解释人类语言&#xff0c;从而提供准确和…

【Linux】IO多路转接 - epoll

文章目录 I/O多路转接之epollepoll初识epoll的相关系统调用函数epoll_createepoll_ctlepoll_wait epoll工作原理epoll服务器-*epoll的优缺点epoll工作方式对比LT和ET I/O多路转接之epoll epoll初识 epoll也是系统提供的一个多路转接的接口,epoll才是使用和面试的重点,在效率和…

SpringBoot【开发实用篇】---- 整合第三方技术(缓存)

SpringBoot【开发实用篇】---- 整合第三方技术&#xff08;缓存&#xff09; SpringBoot内置缓存解决方案手机验证码案例SpringBoot整合Ehcache缓存SpringBoot整合Redis缓存SpringBoot整合Memcached缓存SpringBoot整合jetcache缓存纯远程方案纯本地方案本地远程方案远程方案的数…

tomcat控制台打印乱码解决

一、注册表修改 HKEY_CURRENT_USER ->console ->tomcate 新增 32位 CodePage 16进制 fde9 二、idea 中配置 Tomcat 后启动服务&#xff0c;输出打印日志乱码问题 解决办法&#xff1a; ①、打开安装idea文件路径&#xff0c;在bin目录下&#xff0c;找到下面两个文件 ②…

图像动态裁剪

1. 背景 以两级级联模型为例&#xff0c;第一级目标检测模型用于检测人员&#xff0c;第二级目标检测模型用于检测手机、对讲机等。然后实际数据采集过程中&#xff0c;手机、对讲机这些设备并不在人员的一级检测框内&#xff0c;使得二级模型训练的样本较少。 二级目标检测模…

详细讲解,接口自动化—Requests之Cookie鉴权关联接口实战

目录 前言&#xff1a; 一、 简介 二、 实战操作 1. 登录接口 2. 查询订单接口 3. 新增订单接口 4. 修改订单接口 5. 删除订单接口 三、 结束语 前言&#xff1a; 接口自动化测试是软件测试过程中的重要一环&#xff0c;现在越来越多的公司开始使用自动化测试来提高测…

Gigabyte Z490 Vision D i9-10900k电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。&#xff08;下载请直接百度黑果魏叔&#xff09; 硬件型号驱动情况 主板Gigabyte Z490 Vision D 处理器Intel i9-10900k已驱动 内存64GB G.Skill Trident Z 3600Mhz CL18已驱动 硬盘西数 WDS250G3X0C-00SJG0 ( SN750) …

cad文件怎么转换成pdf格式?一键操作的4个方法

在很多时候&#xff0c;我们为了能够更好地查看CAD图纸&#xff0c;需要将其格式转换为PDF。所以说&#xff0c;CAD文件格式的转换是非常关键的。首先&#xff0c;将CAD转换为PDF格式能够有效提升文件的兼容性。CAD软件通常需要特定的软件才能打开和编辑&#xff0c;而PDF格式则…

Python Scrapy爬虫框架安装和创建

1、检查Win环境 python版本 python 2、whl方式安装 twisted twisted异步网络框架&#xff0c;可加快下载速度。优点是用少量的代码实现快速的抓取。 由于scrapy需要twisted的环境&#xff0c;我们直接去下载whl文件根据自己的Python版本选择 https://www.lfd.uci.edu/~gohlke/p…

由浅入深理解java集合(五)——集合 Map

HashMap 前面已经介绍完了Collection接口下的集合实现类&#xff0c;今天我们来介绍Map接口下的两个重要的集合实现类HashMap,TreeMap。 HashMap 是一个散列表&#xff0c;它存储的内容是键值对(key-value)映射。 既然要介绍HashMap&#xff0c;那么就顺带介绍HashTable,两者进…

【UE4】部署像素流

目录 一、单实例本地像素流送 步骤 1. 勾选插件 2. 打包工程并启动信令服务器 3. 创建快捷方式并启动游戏 二、单实例局域网像素流送 步骤 1. 编辑cirrus.js 2. 编辑快捷方式属性 3. 启动 一、单实例本地像素流送 步骤 1. 勾选插件 勾选使用“Pixel Streaming”插件&…

瑞吉外卖 - 新增员工功能(6)

某马瑞吉外卖单体架构项目完整开发文档&#xff0c;基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成&#xff0c;有需要的胖友记得一键三连&#xff0c;关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料&#xff1a;https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…

智慧水务管控一体化平台,实现水务数字化管理

平台概述 柳林智慧水务管控一体化平台是以物联感知技术、大数据、智能控制、云计算、人工智能、数字孪生、AI算法、虚拟现实技术为核心&#xff0c;以监测仪表、通讯网络、数据库系统、数据中台、模型软件、前台展示、智慧运维等产品体系为支撑&#xff0c;以城市水资源、水生…

ArcSWAT报错:数据集未投影;Dataset must have a projected coordinate system

文章目录 1 报错内容2 定义投影3 重新执行ArcSWAT相关步骤 1 报错内容 Dataset must have a projected coordinate system. The current coordinate system is geographic . Please define a projected coordinate system for your DEM dataset using ArcToolbox before procee…

Java 线程池(Thread Pools)详解

目录 1、线程池介绍 2、线程池执行原理 3、线程池中的阻塞队列 4、Java 线程池中的拒绝策略 5、Java 提供的创建线程池的方式 6、线程池的使用示例 7、ForkJoinPool 和 ThreadPool 的区别 1、线程池介绍 线程池是一种重用线程的机制&#xff0c;用于提高线程的利用率和管…

Android开发:我们很迷茫,出路在哪里?

“都说今年是互联网行业寒风刺骨&#xff0c;尤其移动端开发市场更是饱和&#xff0c;在跌跌撞撞近一个月后&#xff0c;我终于在一家小公司找到了工作。入职后&#xff0c;领导让我接手一个二手Android项目&#xff0c;项目很庞大&#xff0c;前任开发人员已离职一个多月了&am…

实现 Kubernetes 安全态势管理

Kubernetes 已经成为容器编排的事实标准。它引入了强大的管理功能&#xff0c;但也带来了一些严峻的安全挑战——尤其是在多云环境中。其中包括缺乏对设置的可见性、镜像的滥用、通信故障和监控困难。 理解 K8s 的安全挑战 Kubernetes 挑战的核心是需要以高度协调的方式管理大…

日撸 Java 三百行day51

文章目录 说明Day51 KNN 分类器1.KNN2.代码1.aff内容解读2.代码理解 说明 闵老师的文章链接&#xff1a; 日撸 Java 三百行&#xff08;总述&#xff09;_minfanphd的博客-CSDN博客 自己也把手敲的代码放在了github上维护&#xff1a;https://github.com/fulisha-ok/sampledat…

静电防护:消除静电的秘诀!

随着现代科技的进步&#xff0c;人们对静电防护越来越重视。有的人认为消除静电是不可能做到的事情&#xff0c;但实际上并不是这样的&#xff01; 1&#xff1a;静电的产生 静电是一个非常普遍的现象&#xff0c;通常发生在5 kV电压下。静电可以产生于物体表面或环境中。如果…