05. 字符串

news/2024/9/19 15:48:55/文章来源:https://www.cnblogs.com/kurome/p/18416493

一、什么是字符串

  字符串用来表示一段文本信息。在 Python 中,字符串需要使用引号引起来,引号可以是单引号,也可以是双引号,但是不要混的用。相同的引号间不能嵌套使用。

s = 'hello'
print(s)
print(type(s))s = "hello"
print(s)
print(type(s))

  如果双引号和单引号混合使用,会报以下错误:

SyntaxError: EOL while scanning string literal

  相同的引号之间不能嵌套使用,不同的引号之间可以嵌套使用;

s = "子曰:'学而时习之,不亦说乎'"

  单引号和双引号不能跨行使用,如果要换行使用,使用 \ 连接。

s = "锄禾日当午,\
汗滴禾下土。\
谁知盘中餐,\
粒粒皆辛苦。"print(s)

  但是上述程序运行之后,输出结果还是在一行。如果想要换行,并且保留原有的字符串格式,我们可以使用长字符串。长字符串使用三重引号来表示。

s = '''锄禾日当午,
汗滴禾下土。
谁知盘中餐,
粒粒皆辛苦。'''print(s)

二、转义字符

  可以使用 \ 作为转义字符。通过转义字符,可以在字符串中使用一些特性的内容

转义字符 说明
\n 换行符,将光标位置移到下一行开头
\r 回车符,将光标位置移到本行开头
\t 水平制表符,也即 Tab 键,一般相当于四个空
\a 蜂鸣器响铃
\b 退格(Backspace),将光标位置移到前一列
\\ 反斜线
\' 单引号
\" 双引号
\ 在字符串行尾的续行符,即一行未完,转到下一行继续写
\uxxxx 表示 Unicode 编码
s = "子曰:\"学而时习之,不亦说乎\""
print(s)s = "锄禾日当午,\n\
汗滴禾下土。\n\
谁之盘中餐,\n\
粒粒皆辛苦。"print(s)s = '\u2200'
print(s)

三、格式化字符串

【1】、使用 % 占位符格式化字符串

  在创建字符串时,可以在字符串中指定占位符;%s 在字符串中表示任意字符串,%f 表示浮点数的占位符,%d 表示整数的占位符。

# %s表示字符串占位符
name = "Sakura"
print("name: %s" %name)age = 10
# 值按照位置与占位符一一对应
print("name: %s, age: %d" %(name,age))# 以字典的形式传值,打破位置的直线
info = "name: %(name)s, age: %(age)d" %{'name':'Sakura','age':10}
print(info)# %m.ns字符串的长度限制在m-n之间
a = "hello %3.5s' %'abcdefg"
print(a)# %f表示浮点数占位符
# %.nf表示保留n位小数,其余位四舍五入
a = 'result = %.2f' %123.456
print(a)# %d表示整数占位符,如果是浮点是,直接舍弃小数部分
a = "result = %d" %123.95
print(a)

【2】、使用 format() 方法格式化字符串

  我们还可以使用 format() 来进行格式化字符串,该方法是在 Python 2.6 之后的版本引入的。

# 按照位置依次取值
info = "name: {}, age: {}".format("Sakura",10)
print(info)# 按照位置取值,支持索引
info = "name: {0}, age: {1}".format("Sakura",10)
print(info)# 打破位置的限制,按照key=value的方式传值
info = "name: {name}, age: {age}".format(name="Sakura",age=10)
print(info)

  无论是 % 还是 format(),含有占位符的字符串也是可以被复用的;

info = "name: %s, age: %d"
info1 = info %("Sakura",10)
info2 = info %("Mikoto",14)
print(info1)
print(info2)info = "name: {}, age: {}"
info1 = info.format("Sakura",10)
info2 = info.format("Mikoto",14)
print(info1)
print(info2)

【3】、f 字符串

  在 Python 3.6 之后的版本中,我们可以通过字符串前添加一个 f 来创建一个格式化字符串。在格式化字符串中可以直接嵌入变量。

name = "Sakura"
age = 10
info = f"name: {name}, age: {age}"
print(info)

四、原生字符串

  在 Python 中有些字符会有特殊的含义,会进行转义,但是有时候我们不想转义它们,只是想把它们作为普通的字符串打印出来,这是我们可以使用原生字符串,只需在字符串前面加一个 r 即可。

path = r"C:\Program File\navicat\navicat.exe"
print(path)

五、字符串的常见操作

【1】、字符串相加

  在 Python 中,字符串支持进行相加操作,即将两个字符串进行拼接,使用加(+)运算符实现。语法格式如下:

first_name = "Sakura"
last_name = "Kinomoto"
name = first_name + " " + last_name
print(name)

【2】、字符串乘法

  在 Python 中,使用数字 n 乘以一个字符串会生成一个新的字符串。新字符串的内容为原来字符串被重复 n 次的结果。

names1 = "Sakura "
names2 = names1 * 3
print(names2)

【3】、获取字符串的长度

len(s)                                          # 获取字符串长度
name = "Sakura"
print(len(name))

【4】、大小写转换

str.upper()                                     # 将字符串转换为大写
str.lower()                                     # 将字符串转换为小写
str.capitalize()                                # 将字符串的首字母大写
str.swapcase()                                  # 将字符串的大小写反转
str.title()                                     # 将字符串中的每个大慈的首字母大写
name = "My name is Sakura Kinomoto"print("原本的值:",name,end="\n\n")# 将字符串转为大写,作为结果返回,原字符串不变
result = name.upper()
print("转换为大写后的结果:",result,end="\n\n")# 将字符串转为小写,作为结果返回,原字符串不变
result = name.lower()
print("转换小写后的结果:",result,end="\n\n")# 将字符串的首字母大写,作为结果返回,原字符串不变
result = name.capitalize()
print(f"首字母大写后的结果:",result,end="\n\n")# 将字符串的大小写反转,作为结果返回,原字符串不变
result = name.swapcase()
print("大小写反转的结果:",result,end="\n\n")# 将字符串的每个单词的首字母大写,作为结果返回,原字符串不变
result = name.title()
print("大小写反转的结果:",result,end="\n\n")

【5】、判断字符串的组成

str.isupper()                                   # 判断字符串是否全为大写
str.islower()                                   # 判断字符串是否全为小写
str.istitle()                                   # 判断字符串中每个单词是否首字母大写
str.isalnum()                                   # 判断字符串是否由字母或数字组成
str.isdecimal()                                 # 判断字符串是否由数字组成
str.isalpha()                                   # 判断字符串是否由字母组成
str.isspace()                                   # 判断字符串是否由空格组成
name = "Sakura Kinomoto"print("字符串是否全为大写",name.isupper())
print("字符串是否全为大写",name.islower())
print("字符串中每个单词的首字母是否大写",name.title())
print("字符串是否由字母和数字组成",name.isalnum())
print("字符串是否由数字组成",name.isdecimal())
print("字符串是否由字母和数字组成",name.isalpha())
print("字符串是否由空格组成",name.isspace())

【6】、判断字符串是否为数字

str.isdecimal()                                 # 判断字符串是否由数字组成
str.isdigit()                                   # 判断字符串是否为阿拉伯形式的数字
str.isnumeric()                                 # 判断字符串是否为数字
num1 = b"3"                         # 阿拉伯格式的数字
num2 = "3"                          # 阿拉伯格式的数字
num3 = "三"                         # 中文简体数字
num4 = "叁"                         # 中文繁体数字
num5 = "Ⅲ"                         # 罗马格式的数字
num6 = "③"                          # 阿拉伯格式的数字print("isdecimal()方法判断")
#print(num1,":",num1.isdecimal())  # 无此方法
print(num2,":",num2.isdecimal())
print(num3,":",num3.isdecimal())
print(num4,":",num4.isdecimal())
print(num5,":",num5.isdecimal())
print(num6,":",num6.isdecimal())print("\nisdigit()方法判断")
print(num1,":",num1.isdigit())
print(num2,":",num2.isdigit())
print(num3,":",num3.isdigit())
print(num4,":",num4.isdigit())
print(num5,":",num5.isdigit())
print(num6,":",num6.isdigit())print("\nisnumber()方法判断")
#print(num1,":",num1.isnumeric())  # 无此方法
print(num2,":",num2.isnumeric())
print(num3,":",num3.isnumeric())
print(num4,":",num4.isnumeric())
print(num5,":",num5.isnumeric())
print(num6,":",num6.isnumeric())

【7】、判断字符串以什么开头以什么结尾

str.startswith(prefix[, start[, end]])          # 判断字符串是否以什么开头
str.endswith(suffix[, start[, end]])            # 判断字符串是否以什么结尾
text = "中国电信"# 判断字符串是否以什么开头
if text.startswith("中国"):print("以中国开头")
else:print("不是以中国开头")# 判断字符串是否以什么结尾
if text.endswith("电信"):print("以电信结尾")
else:print("不是以电信结尾")

【8】、删除字符串的前缀或后缀

str.removeprefix(prefix, /)                     # 删除字符串的前缀
str.removesuffix(suffix, /)                     # 删除字符串的后缀
url = "https://baidu.com"
result = url.removeprefix("https://")
print(result)
result = result.removesuffix(".com")
print(result)

【9】、字符串的替换

str.replace(old, new[, count])                  # 替换指定的字符串
text = "中国电信,电信流量卡"
# 字符串的替换
result = text.replace("电信","移动")
print(text)
print(result)

【10】、字符串的切割

str.split(sep=None, maxsplit=- 1)               # 以sep字符切割maxsplit次字符串
str.rsplit(sep=None, maxsplit=- 1)              # 以sep字符切割maxsplit次字符串,从右边开始切割
str.partition(sep)                              # 以sep字符切割一次字符串
str.splitlines(keepends=False)                  # 以换行为切割符,切割字符串
text = "Sakura,10,sakura@petal.com"# 字符串的切割
data_list = text.split(',')
print(data_list)# 我们还可以指定最多切割几次
data_list = text.split(',',maxsplit=1)
print(data_list)# 从右边开始切割
data_list = text.rsplit(',',1)
print(data_list)# 以指定的字符从分割
data_list = text.partition(",")
print(data_list)
text = """
Hello world!
My name is Sakura!
"""data_list = text.splitlines()
print(data_list)

【11】、字符串的拼接

str.join(iterable)                              # 字符串的拼接
# 这是一个列表
name_list = ["Sakura","Mikoto","Shana"]
# 字符串的拼接
str = '/'.join(name_list)
print(str)

【12】、去除字符串的两端的空白

str.strip([chars])                              # 去除两端空白
str.lstrip([chars])                             # 去除左端空白
str.rstrip([chars])                             # 去除右端空白
text = "  中国电信  中国移动   中国联通"
print(text)# 去掉字符串两端的空白
result = text.strip()
print(result)# 去掉字符串左边的空白
result = text.lstrip()
print(result)# 去掉字符串右边的空白
result = text.rstrip()
print(result)

【13】、判断字符串是否包含指定字符串

object.__contains__(self, item)                 # 判断字符串是否包含指定字符串
text = "中国移动通信"result = text.__contains__("移动")
print(result)result  = "移动" in text
print(result)

【14】、统计字符串中某个字符串出现的次数

str.count(sub[, start[, end]])                  # 统计字符串中某个字符串出现的次数
name = "Sakura"
# 统计a出现的次数
print(name.count('a'))

【15】、查找指定字符串

str.find(sub[, start[, end]])                   # 查找指定字符串
str.index(sub[, start[, end]])                  # 查找指定字符串第一次出现的索引
name = "Sakura"
print(name.find('a'))
print(name.index('a'))

find() 方法如果没找到则返回 -1;

index() 方法如果找不到,程序会抛出异常:ValueError: substring not found;

【16】、字符串的填充

str.center(width[, fillchar])                   # 字符串的填充,只能填充一种字符
str.ljust(width[, fillchar])                    # 字符串填充,内容在左边
str.rjust(width[, fillchar])                    # 字符串填充,内容在右边
str.zfill(width)                                # 字符串填充,左边补0
name = "Shana"
# 字符串的填充,只能填充一种字符
print(name.center(20,'*'))
print(name.ljust(20,'*'))
print(name.rjust(20,'*'))# 字符串填充,左边补0
data = "1001"
print(data.zfill(8))

【17】、字符串转换成字节类型

str.encode(encoding='utf-8', errors='strict')   # 字符串转换成字节类型
bytes.decode(encoding='utf-8', errors='strict') # 将字节类型转换为字符串
data = "中国移动"
v1 = data.encode("utf-8")
print(v1)data = v1.decode("utf-8")
print(data)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

6、函数的声明

程序是一行行执行,我们可以在前面进行函数声明,然后将函数的定义放在程序末尾。 声明可以写多次,但是定义只能写一次。

如何基于Java解析国密数字证书

一、说明 随着信息安全的重要性日益凸显,数字证书在各种安全通信场景中扮演着至关重要的角色。国密算法,一、说明 随着信息安全的重要性日益凸显,数字证书在各种安全通信场景中扮演着至关重要的角色。国密算法,作为我国自主研发的加密算法标准,其应用也愈发广泛。然而,在…

Windows应急响应-个人整理

个人总览-仍待完善Windows应急响应整理(一)参考 1.NOPTeam的手册链接 2.fox-yu的博客(思路很清晰,对我这个小白来说很友好)1.整体思路 1.1常见事件类型(不完整、待补充)网络协议攻击:拒绝服务攻击:DDos、CC攻击、泛洪攻击等。链接 DNS劫持 ARP欺骗web入侵:webshell 网页挂马…

视野修炼-技术周刊第101期 | 垂直居中

① align-content - 垂直居中普通元素 ② up mode - 一键隐藏 Chrome 插件 ③ Chrome 性能面板新功能 ④ k-colors.js - 图片主色提取 ⑤ 英:优化JS性能的一些技巧 ⑥ 英:Web 的剪贴板,如何存储不同类型的数据 ⑦ 英:不简单的 js 入门教程 ⑧ Peter Cat - GitHub 仓库智能答…

06: 抽象工厂模式

提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类1. 案例 在Access和SQL server分别插入User表和Department表 2. 抽象工厂模式结构 - 抽象产品(AbstractProduct):所有产品的基类,提供产品类的公共方法struct User {std::string m_sName = "";…

南沙C++信奥老师解一本通题 1371:看病

​【题目描述】有个朋友在医院工作,想请BSNY帮忙做个登记系统。具体是这样的,最近来医院看病的人越来越多了,因此很多人要排队,只有当空闲时放一批病人看病。但医院的排队不同其他排队,因为多数情况下,需要病情严重的人优先看病,所以希望BSNY设计系统时,以病情的严重情…

堪称最优秀的 Docker 可视化管理工具 ——Portainer

Portainer 是一款轻量级的应用,它提供了图形化界面,用于方便地管理 Docker 环境,包括单机环境和集群环境。随着 Docker 内实例越来越多,就得涉及到监控以及统计的需求:有多少个容器?运行的有几个?有哪些容器 CPU 使用率低?... Portainer 是一款轻量级的应用,它提供了图…

分布式数据库中间件:MyCat 和 ShardingSphere

分布式数据库中间件 用于实现 分库、分表、分片、分布式事务、读写分离 等。 本文 是 调查 MyCat 和 ShardingSphere 两款 中间件 的一些信息汇总。本文时间:2024年9月。MyCat Mycat数据库分库分表中间件。ben发布于博客园 http://www.mycat.org.cn github-Mycat1 https://gi…

Python 遭遇 ProxyError 问题记录

本内容复制知乎的一个贴子,在此只做下记录及参考和学习,原链接地址: 最近遇到的一个问题,在搞清楚之后才发现这么多年的 HTTPS_PROXY 都配置错了! 起因 想用 Python 在网上下载一些图片素材,结果 requests 报 requests.exceptions.ProxyError,具体的错误信息见下面。当然…

白云龙期货投资-第二讲

K线图基本用途就是为了寻找“买卖点”,所有的进场点有K线配合能大大的提高进场的成功率。关键点位出现K线及组合配合。大胆进场(波浪理论第五浪。回调黄金分割率点,趋势线,颈线,整数关口等)。K线技术-一切技术之根本 K线图基本用途就是为了寻找“买卖点”,所有的进场点有K…

博客园主题皮肤

背景图:目前使用的是Awescnb主题的geek 参照:https://blog.csdn.net/zk_tww/article/details/141030258

用户验收测试指南0简介

0 简介 这是一本关于多种形式的用户验收测试(UAT)及其用途的。它汇集了有关测试、项目管理、质量管理、团队行为和完整的用户验收测试经验的其他相关材料,并将它们编织成一条牢固可靠的生命线,供用户验收测试新手指南或利益相关者参考。 本书是为满足三类不同人群的需求而编…