当前位置: 首页 > news >正文

python字符串应用

一、字符串认识

1.什么是字符串(str)

容器型数据类型; 将’‘、“”、’‘’‘’'、“”“”""作为容器的标志里面的每个符号就是字符串中元素。
不可变的(不支持增删改);有序的(支持下标操作)
元素(字符):可以是任何文字符号, 包括:数字、字母、汉字、日文、韩语、表情符号、标点等

任何文字符号都可以是字符串的元素

str1 = '10,20,30'
str2 = '12,=)*mksJkH胡上课😁❀'

三个引号开头三个引号结束的字符串,在字符串中可以直接按回车换行

str3 = "abc\n123"
print(str3)

str4 = '''abc
123'''
print(str4, type(str4))

2. 转义字符

字符 - 字符串中的元素(字符串每一个独立的符号)
字符串中的字符可以分为两种:普通字符、转义字符

1)普通字符: 在字符串中表示符号本身的字符
2)转义字符: \和指定的一些符号组合在一起表示特殊功能或者特殊意义的字符。
转义字符是C语言创建的,但是很多都已经没有存在的价值的,目前常用的转义字符:
\n - 换行
\t - 水平制表符(相当于按一次tab键)
’ - 表示一个普通的单引号
" - 表示一个普通的双引号
\ - 表示一个普通的反斜杠

\u四位的十六进制数 - 编码字符

str5 = 'abcKH1234,😁'
print(str5)

并不是\和所有符号组合都可以变成转义字符

str6 = '\m\k\l'
print(str6)     # \m\k\l

有一些C语言中的转义字符,在其他编程语言中无效

str7 = '=\a=\f='
print(str7)


str8 = '\tabc\n123'
print(str8)

str9 = 'it\'s me'
str10 = "it's me"

str11 = "i say: \"you see see, one day day!\""
print(str11)

str12 = 'i say: \"you see see, one day day!\"'

str13 = '\\name\yuting\论文.txt'
print(str13)

编码字符

str14 = '\u4e01abc'
print(str14)
#丁abc

3.r-string(r字符串)

在字符串的最前面加r或者R,可以让字符串中所有的转义字符功能消失(让字符串中的所有字符自动变成普通字符)

str1 = r'\tabc\n123\''
print(str1) #\tabc\n123\'
path = R'C:\ser\test\name\yuting\demo\t.txt'
print(path) #C:\ser\test\name\yuting\demo\t.txt

二、字符编码

1. 编码值

计算机存储数据的时候只能存数字(存的是数字对应的二进制的补码);
为了能够让计算机存储字符,给每个字符对应一个固定的数字,每次需要存储这个字符的时候就去存这个数字;
每个字符对应的那个数字就是这个字符的编码值。

2.编码表 - 保存不同字符对应的编码值的表

1)ASCII码表 - 有128个字符对应的编码值(只要包含英文符号和其他西欧语言对应的符号)
数字字符0~9从48开始连续递增
大写字母A~Z从65开始连续递增
小写字母a~z从97开始连续递增

2)Unicode编码表(Python) - 是ASCII码表的扩展(包含了ASCII码表),包含了世界上所有国家所有民族所有语言的对应的符号(统一码、万国码)
中文范围:4e00 ~ 9fa5

3.Python程序对编码值的应用

1)chr(编码值) - 获取指定编码值对应的字符

print(chr(97), chr(65))

#### 打印所有的大写字母
for x in range(65, 65+26):
    print(chr(x))


print(chr(0x4e00), chr(0x9fa5))

for x in range(0x4DC0, 0x4DFF+1):
    print(chr(x), end=' ')
print()

2)ord(字符) - 获取指定字符对应的编码

注意:字符指是长度为1的字符串

print(ord('牛'), ord('子'))
print(hex(20313), hex(23159))

print(ord('a'))

3)编码字符: \u四位的十六进制数

程序中给字符串提供字符的时候有两种方式:a.直接提供符号本身 b.通过字符对应的编码字符来提供(\u字符的16进制编码值)

str1 = 'a余'
str2 = '\u0061\u4f59'
print(str1, str2)

编码字符的使用场景:知道字符编码值,但是不知道字符的情况下,想要在字符串中提供这样一个字符

print('在Unicode编码表中最后一个中文是:', '\u9fa5')

三、字符串基本操作

1.查 - 获取字符串中的字符

字符串获取字符的语法和列表获取元素的语法一样。

1)获取单个字符

str1 = 'good good study! day day up!'
print(str1[3], str1[-2])

注意:不管转义字符的功能是什么,在计算字符串长度的时候一个转义字符的长度是1

str2 = '\tabc\n123\u4e00m'
print(str2[1], str2[-3])

2)切片

message = '小明的电话号码是:13678192303'
print(message[-11:])            # '13678192303'
print(message[3:-2:-2])         # ''
print(message[1:-1:2])          # '明电号是16893'

3)遍历

str3 = 'hello python!'
for x in str3:
    print(x)


for x in range(len(str3)):
    print(x, str3[x])


for index, item in enumerate(str3):
    print(index, item)

2. 数学运算:+、*

1) 字符串1 + 字符串2 - 将两个字符串合并产生一个新的字符串(字符串拼接)

str1 = 'hello'
str2 = 'world!'
str3 = str1 + ' ' + str2
print(str3)

在这里插入图片描述

2) 字符串 * N - 将字符串重复N次产生一个新的字符串

str4 = str1 * 3
print(str4)

在这里插入图片描述

案例:提取字符串中所有数字字符

‘abc12MK89你好9’ -> ‘12899’

str1 = 'abc12MK89你好9'
new_str = ''
for x in str1:
    if '0' <= x <= '9':
        new_str += x
print(new_str)      # '12899'

# ''+'1' -> '1' + '2' ->'12' + '8'  -> '128' ...

案例:在字符串中两个字符之前插入*

在这里插入图片描述

str1 = 'abc12'
new_str = ''
for x in str1:
    new_str += x + '*'

print(new_str[0:-1])

练习:将字符串中所有的数字字符都替换成*

在这里插入图片描述

str1 = 'ab2Mk89你好8'
new_str = ''
for x in str1:
    if '0' <= x <= '9':
        new_str += '*'
    else:
        new_str += x
print(new_str)      # 'ab*Mk**你好*'

3.比较运算:>、<、>=、<=、==、!=

1)判断相等:两个一模一样的字符串才相等

print('abc' == 'acb')       # False

2)比较大小: 两个字符串比较大小,比较的是第一对不相等的字符的编码值的大小

已知字符x:
判断x是否是数字字符: ‘0’ <= x <= ‘9’
判断x是否是小写字母: ‘a’ <= x <= ‘z’
判断x是否是大写字母: ‘A’ <= x <= ‘Z’
判断x是否是字母: ‘a’ <= x <= ‘z’ or ‘A’ <= x <= ‘Z’
判断x是否是中文: ‘\u4e00’ <= x <= ‘\u9fa5’

print('MKAHDJSS' > 'abc')       # False

练习:分别统计字符串中中文和大写字母的数量

str1 = 'shfa换手机223--=2MjshUj行HSJSA'
count1 = count2 = 0
for x in str1:
    if '\u4e00' <= x <= '\u9fa5':
        count1 += 1
    elif 'A' <= x <= 'Z':
        count2 += 1
print(count1, count2)

4. in 和 not in

字符串1 in 字符串2 - 判断字符串1是否是字符串2的子串(判断字符串2中是否包含字符串1)

print(10 in [10, 20, 30])           # True
print([10, 20] in [10, 20, 30])     # False

print('a' in 'abc123')          # True
print('abc' in 'abc123')        # True
print('ab1' in 'abc123')        # False

5. str(数据) - 将指定数据转换成字符串

所有类型的数据都可以转换成字符串,转换的时候是在数据的打印值外面加引号

print(100)
str(100)        # '100'

list1 = [10,20,30]
print(list1)        # [10, 20, 30]
str(list1)     # '[10, 20, 30]'

list2 = ["abc", 100]
print(list2)
str(list2)      # "['abc', 100]"

dict1 = {"a":10,'b':20, 'c':"abc"}
print(dict1)
str(dict1)      # "{'a': 10, 'b': 20, 'c': 'abc'}"

四、字符串相关方法

字符串.xxx()

1. 必须掌握的字符串相关方法(一级)

1) 字符串.join(序列) - 用指定字符串将序列中元素拼接成一个字符串(序列中的元素必须是字符串)

result = '+'.join(['name', 'age', 'gender'])
print(result)       # name+age+gender

result = '=='.join('abc')
print(result)       # a==b==c

nums = [10, 20, 30, 40]
# '10+20+30+40'
result = '+'.join([str(x) for x in nums])
print(result)       # '10+20+30+40'


list1 = [10, 'abc', '你好', 1.23, True, '手机壳']
# 'abc你好手机壳'
result = ''.join([x for x in list1 if type(x) == str])
print(result)       # 'abc你好手机壳'

练习:将列表中每个元素的第一个字符提取出来形成一个新的字符串:

[‘name’, ‘age’, ‘gender’] -> ‘nag’

list1 = ['name', 'age', 'gender']
result = ''.join([x[0] for x in list1])
print(result)

2) split

字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割点对字符串1进行切割

字符串1.split(字符串2, N) - 将字符串1中前N个字符串2作为切割点对字符串1进行切割

str1 = '123abc你好abc===abc+++'
result = str1.split('abc')
print(result)       # ['123', '你好', '===', '+++']

result = str1.split('a')
print(result)       # ['123', 'bc你好', 'bc===', 'bc+++']

result = str1.split('abc', 2)
print(result)       # ['123', '你好', '===abc+++']

注意:如果切割点连续出现或者切割点在字符串的开头或者结果,切割的结果中会出现空串

str1 = 'abc123abcabc你好abc===abc+++abc'
result = str1.split('abc')
print(result)       # ['', '123', '', '你好', '===', '+++', '']

3)字符串1.replace(字符串2, 字符串3) - 将字符串1中所有的字符串2都替换成字符串3

字符串1.replace(字符串2, 字符串3, N) - 将字符串1中前N个字符串2都替换成字符串3

message = 'how are you? i am fine! thank you! and you?'
result = message.replace('you', 'me')
print(result)       # how are me? i am fine! thank me! and me?

result = message.replace('you', 'me', 1)
print(result)       # how are me? i am fine! thank you! and you?

案例:删除字符串message中所有的空格符号

result = message.replace(' ', '')
print(result)       # howareyou?iamfine!thankyou!andyou?

4)

字符串.strip() - 删除字符串前后两端的空白字符

字符串.strip(字符集) - 删除字符串前后两端的指定所有字符

str1 = '''
     你 好,世 界                     
     
    '''

result = str1.strip()
print(result)


str2 = '/+//u/重/庆a++///++//'
result = str2.strip('/+')
print(result)

5)

字符串1.find(字符串2) - 获取字符串2第一次出现在字符串1中的位置,如果字符串2不存在返回-1

字符串1.index(字符串2) - 获取字符串2第一次出现在字符串1中的位置,如果字符串2不存报错

message = 'how are you? i am fine! thank you! and you?'
print(message.find('you'), message.index('you'))

print(message.find('abc'))      # -1

print(message.index(‘abc’)) # 报错

字符串1.find(字符串2, 开始下标, 结束下标) - 在字符串1中指定范围内查找字符串2第一次出现的位置, 如果找不到返回-1

字符串1.index(字符串2, 开始下标, 结束下标) - 在字符串1中指定范围内查找字符串2第一次出现的位置, 如果找不到报错

message = 'how are you? i am fine! thank you! and you?'
print(message.find('you', 0, 8))        # -1
print(message.find('you', 11))          # 30

字符串1.rfind(字符串2) - (从后往前找)

字符串1.rindex(字符串2) - (从后往前找)

message = 'how are you? i am fine! thank you! and you?'
print(message.rfind('you'))     # 39

2.尽可能记住的字符串相关方法

1) count

2) isdigit()

3) islower()、isupper()

4)lower()、upper()

5)maketrans()、translate()

6)rjust()、ljust、center、zfill

s=‘ab,cd’
s.isdigit() 判断是不是数字字符串
s.isalpha() 判断是不是字母字符串
s.isanum() 判断是不是数字或字母字符串
ljust/rjust/center==</>/^ 左对齐、右对齐、中间对齐
s.startswith()\s.endwith() 判断开头/结尾是否为要求字体
str(list) 转换其他元素为字符串
s.split() 切割,对应某字符将字符串切割放在列表中
‘’.join(list) 将容器中元素以某符号间隔添加到字符串中
s.replace(oldStr, newStr, 替换次数(不写表示全部)) 将字符串中某元素替换
strip(‘’) 去除两端某符号

相关文章:

  • asp.net高校网上评教信息系统VS开发sqlserver数据库web结构c#编程计算机网页项目
  • 暂退法dropout----详解与分析(多层感知机)
  • Android Tablayout样式修改
  • 朋友圈那位隐藏大佬的单片机学习心得
  • Android系统启动流程全解析--你知道Android系统启动都干了啥吗
  • openGl绘制五星红旗
  • 【数据结构】二叉树
  • HTML常用标签二
  • 高数(下) 第十二章:无穷级数
  • 【GOF】三种工厂模式~
  • 算法 |【实验5.2】1-深度优先搜索暴力求解旅行商问题
  • OpenCV-Python学习(2)—— OpenCV 图像的读取和显示
  • Unity技术手册-初识编辑器(上)
  • 基于Java+SpringBoot+vue+elementui图书商城系统设计实现
  • 电子病历结构化之实体识别(附完整项目代码)
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • Android单元测试 - 几个重要问题
  • centos安装java运行环境jdk+tomcat
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • MySQL QA
  • Spring Boot快速入门(一):Hello Spring Boot
  • vue--为什么data属性必须是一个函数
  • 对超线程几个不同角度的解释
  • 关于Java中分层中遇到的一些问题
  • 盘点那些不知名却常用的 Git 操作
  • 巧用 TypeScript (一)
  • 如何利用MongoDB打造TOP榜小程序
  • 入口文件开始,分析Vue源码实现
  • 算法---两个栈实现一个队列
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #QT项目实战(天气预报)
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (03)光刻——半导体电路的绘制
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (五)IO流之ByteArrayInput/OutputStream
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .net FrameWork简介,数组,枚举
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET连接MongoDB数据库实例教程
  • .NET使用存储过程实现对数据库的增删改查
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国