字符串 & 正则表达式

  • 一、字符串
  • 二、函数处理
    • 1、查找
    • 2、分割
    • 3、大小写转换
    • 4、修剪
    • 5、检测开头结尾
    • 6、排版
    • 7、串型判断
  • 8、语句转化
  • 三 、正则表达式匹配
    • 1、正则模块处理
    • 2、正则对象处理

一、字符串

字符串主要用于编程,概念说明、函数解释、用法详述见正文,这里补充一点:字符串在存储上类似字符数组,所以它每一位的单个元素都是可以提取的,如s=“abcdefghij”,则s[1]=“b”,s[9]=“j”,这可以给我们提供很多方便,如高精度运算时每一位都可以转化为数字存入数组。

  • Python 字符串支持' '" "''' '''三种定义方式。
  • Python 字符串是序列的一种,属于不可变序列
  • Python 字符串支持双向索引取出字符、切片操作(无法赋值)。

字符串(str)的基本操作:

#创建字符串
a = 'abc'
b = '123'
#连接字符串
c = a + b #c = 'abc123'
#查看类型
type(c)     #<class 'str'>
#迭复字符串
a * 2       #'abcabc'
#判断字串是否在字符串内
b in c      #True
#判断长度
len(c)      #6
#双向索引取出取字符
c[1]        #'b'
c[-2]       #'2'
#切片操作
c[::]       #等同于c[:],'abc123'
c[1:]       #等同于c[1::1],'bc123'
c[1::2]     #'b13'
c[:2]       #'ab'
c[:-2]      #'abc1

二、函数处理

1、查找

方法名 作用 参数
find / rfind 查找字串在母串指定范围中 首次 / 最后一次 出现的位置
不存在返回-1
find / rfind(sub_str [, start_index [, end_index]])
index / rindex 查找字串在母串指定范围中 首次 / 最后一次 出现的位置
不存在抛出异常substring not found
index / rindex(sub_str [, start_index [, end_index]]
count 计算字串在母串中出现的次数 count(sub_str)

其中,sub_str代表模式子串,start_index 代表起始索引,end_index 代表结束索引。如若省略 end_index 则查询范围从起始索引至串尾,如若同时省略 start_index 则默认查询范围为整个母串。

#创建字符串
s = 'haha,blue,ground,approach,haha,red,yellow,blue,ground'
#调用 find / rfind 方法
s.find('haha')        #结果:0
s.rind('haha')        #结果:26
#调用 index / rindex 方法
s.index('blue')       #结果:5
s.rindex('blue')  #结果:42
#指定范围查找
s.index('haha',4) #结果:26
s.find('ha',4,9)  #结果:-1
#比较异同
s.rindex('haa')
#Traceback (most recent call last):
#  File "<stdin>", line 1, in <module>
#ValueError: substring not found
s.rfind('haa')
#-1
#调用 count 方法
s.count('approach')   #结果:1
s.count('ground') #结果:2
s.count('haa')        #结果:0

2、分割

方法名 作用 参数
split / rsplit 指定字符为分隔符(不指定默认为任何空白字符),从左端 / 右端 开始,将字符串分割为字符串列表,并返回 split / rsplit([pattern_sub])
partition / rpartition 指定字符为分隔符(必须指定字符),从左端 / 右端 开始,将字符串分割为“前串”,“分隔符”,“后串”三部分组成的字符串元组,并返回 partition / rpartition(pattern_sub)
#split / rsplit:
#创建字符串
s = 'haha,blue,ground,approach,haha,red,yellow,blue,ground'
t = 'a sd dfg \n\r sadadas asdasd\v asdasd \t asdasdas'
#分割字符串
s.split(',')      #['haha', 'blue', 'ground', 'approach', 'haha', 'red', 'yellow', 'blue', 'ground']
#规定最大分割次数,并逆向(从右端)开始分割
s.rsplit(',',maxsplit=6) #['haha,blue,ground', 'approach', 'haha', 'red', 'yellow', 'blue', 'ground']
#不传入参数(默认为任何空白字符)
t.split()           #['a', 'sd', 'dfg', 'sadadas', 'asdasd', 'asdasd', 'asdasdas']
#partition / rpartition:
#三分字符串
s.partition(',')  #('haha', ',', 'blue,ground,approach,haha,red,yellow,blue,ground')
s.rpartition(',') #('haha,blue,ground,approach,haha,red,yellow,blue', ',', 'ground')

3、大小写转换

方法名 作用
lower / upper 转换为 全小写 / 大写 串
capitalize 字符串首字母大写
title 标题化,每个单词首字母大写(以空格为分隔)
swapcase 所有字母大小写互换

大小写转换的所有方法均为无参方法。

#创建字符串
s = 'What is that?'
t = 'why students should be encouraged to develop creativity'
r = 'sASSASAS.rAaaaA'
#全大小写串转换
s.upper()   #'WHAT IS THAT?'
s.lower()   #'what is that?'
#字符串首字母大写
r.capitalize()  #'Sassasas.raaaa'
#标题化字符串
t.title()       #'Why Students Should Be Encouraged To Develop Creativity'
#大小写互换
r.swapcase()    #'Sassasas.RaAAAa'

4、修剪

方法名 作用 参数
strip 删除两端连续空白字符(无参数) / 指定字符 strip([pattern_str])
lstrip 删除左端连续空白字符(无参数) / 指定字符 lstrip([pattern_str])
rstrip 删除右端连续空白字符(无参数) / 指定字符 rstrip([pattern_str])
#创建字符串
s = '   \t \v\n I am fine! \r'
u = '     username     '
x = ' aaa aa a x a aa aaa'
#修剪字符串
s.strip()       #'I am fine!'
u.lstrip()      #'username     '
x.lstrip('a') #串首有空格所以不会发生变化,' aaa aa a x a aa aaa'
x.rstrip('a') #只会删除首次相遇的连续指定字符,' aaa aa a x a aa '

5、检测开头结尾

方法名 作用 参数
startswith 判断是否以子串开头 startswith(start_str)
endswith 判断是否以子串结尾 endswith(end_str)
#创建字符串
s = '001|Have a nice day!'
#判断开头结尾
s.startswith('001')       #True
s.endswith('001')     #False

6、排版

方法名 作用 参数
center 居中对齐,需指定长度,填充字符默认为空格,亦可自定义填充字符 center(length [,fill_char])
ljust 左对齐,需指定长度,填充字符默认为空格,亦可自定义填充字符 ljust(length [,fill_char])
rjust 右对齐,需指定长度,填充字符默认为空格,亦可自定义填充字符 rjust(length [,fill_char])
zfill 返回指定宽度字符串,其余位以‘0’作为填充 zfill(length)
#创建字符串
s = 'I am fine'
t = '12589'
#字符串居中,默认填充字符
s.center(15)        #'   I am fine   '
#字符串居中,指定填充字符'-'
s.center(15,'-')  #'---I am fine---'
#字符串左、右对齐
s.ljust(20)         #'I am fine           '
s.rjust(20)         #'           I am fine'
#字符串填充0
t.zfill(len(t) + 10)   #原串长度为5,向串前填充10个0,'000000000012589'

7、串型判断

  • 串型判断的所有方法均为无参方法。

数字型判断

方法名 功能
isalnum 判断串是否由 字母 / 数字 组成
isdigit 判断串是否由 全数字 组成
isdecimal 判断串是否 只包含十进制数字 字符
isnumeric 判断串是否由 具有数字含义的字符 构成
(支持纯阿拉伯数字、汉字大小写数字、罗马数字及其组合)
#创建字符串
s1 = '一'
s2 = '玖'
s3 = 'Ⅸ'
s4 = '0.1250'
s5 = '010'
s6 = 'a1234'
#判断
#isalnum()              判断串是否由 字母 / 数字 组成
s6.isalnum()                #数字 + 字母:True
s5.isalnum()                #全数字:True
#isnumeric()            具有数字含义的字符 构成
#支持纯阿拉伯数字、汉字大小写数字、罗马数字及其组合
s1.isnumeric                #小写汉字数字:True
s2.isnumeric()              #大写汉字数字:True
s3.isnumeric()              #罗马数字:True
s5.isnumeric()              #阿拉伯数字:True
(s3+s2+s1).isnumeric()        #混合数字字符:True
s4.isnumeric()              #包含'.':False
#isdecimal()            判断串是否 只包含十进制数字 字符
s4.isdecimal()              #包含'.':False
s5.isdecimal()              #仅包含十进制数字:True
#isdigit()              断串是否由 全数字 组成
s4.isdigit()                #包含'.':False
s5.isdigit()                #仅包含数字:True

字母型判断

方法名 功能
isalnum 判断串是否由 字母 / 数字 组成
isalpha 判断串是否由 全字母 组成
isupper 判断串是否为 全大写 字母串
islower 判断串是否为 全小写 字母串
#创建字符串
s1 = 'AAAA'
s2 = 'bbb'
s3 = 'I am fine.'
s4 = 'Abcd@'
s5 = 'a1234'
#isalnum()          判断串是否由 字母 / 数字 组成
s4.isalnum()            #包含特殊字符:False
s5.isalnum()            #数字 + 字母:True
s1.isalnum()            #纯字母:True
#isalpha()          判断串是否由 全字母 组成
s3.isalpha()            #纯字母:True
s4.isalpha()            #包含特殊字符:False
s5.isalpha()            #数字 + 字母:False
#isupper()          判断串是否为 全大写 字母串
s1.isupper()            #纯大写字母:True
s2.isupper()            #纯小写字母:False
s3.isupper()            #大小写混合:False
#islower()          判断串是否为 全小写 字母串
s1.islower()            #纯大写字母:False
s2.islower()            #纯小写字母:True
s3.islower()            #大小写混合:False

空白型判断

方法名 功能
isspace 判断串是否为纯空白字符串
#创建字符串
s = '   \n \r \v   \t '
#判断是否为空白字符串
s.isspace()     #True

8、语句转化

核心函数:eval(str)

  • 用途:将字符串转化为语句并执行,这意味着我们可以让程序自动拼出语句执行
#创建变量
a = 3
b = 4
#执行字符串型语句
eval('6+9')              #15
eval("a + b")            #7
#导包执行其他语句
import math
eval('math.pow(4,3)') #64.0

三 、正则表达式匹配

常用字符 功能匹配
. 任意单字符(除换行符外)
* 子模式 0 次 / 多次出现
+ 子模式 1 次 / 多次出现
- 在[ ]中表示范围
^ 模式开头
$ 模式结尾
? 匹配位于“?”之前的0个或1个字符或子模式
\w 字母、数字、下划线
\n 换行符
\d 数字
\b 单词头 / 单词尾
() 将()中内容作为一个整体来看待
[] 匹配位于[]中的任意一个字符
{} 按{}中指定的次数进行匹配,例如,{3,8}表示前面的字符或模式至少重复3次而最多重复8次

正则表达式模式串前须加字母r:r'模式串'

1、正则模块处理

一般方法:

方法名 功能 参数
compile 创建模式对象 compile(pattern_str [, flags])
escape 将字符串所有特殊正则表达式字符转义 escape(str)
findall 字符串所有模式匹配项 findall(pattern_str , str [, flags])
purge 清空正则表达式内存 purge()
split 根据模式匹配项,分割字符串 split(pattern_str , str [, maxspilt=0])
#导入正则模块处理包re
import re
#创建字符串:
s = 'apple,approach,agree'
x = ' aaa aa a x a aa aaa'
#寻找所有以a开头的单词
re.findall('a\w+',s)     #['apple', 'approach', 'agree']
#清空正则表达式内存
re.purge()
#分割字符串,指定多个可能的分隔符
re.split(r'[,.\|]',s)     #['apple', 'approach', 'agree']
#分割字符串,指定多个可能的分隔符、最大分割次数
re.split(r'[,.\|]',s,1)       #['apple', 'approach,agree']

Match对象支持方法:

方法名 功能 参数
fullmatch
match 字符串串首单一模式匹配项,若不匹配则返回None
search 字符串整串单一模式匹配项,若不匹配则返回None
sub 字符串替换,返回结果为替换后字符串 sub(pat, repl , str [, count=0])
subn 字符串替换,返回结果为替换后字符串与替换次数组成的元组 subn(pat, repl , str [, count=0])
#导入正则模块处理包re
import re
#创建字符串:
s = 'apple,approach,agree'
x = ' aaa aa a x a aa aaa'#查找
re.findall(r'\ba\w*\b',s)     #['apple', 'approach', 'agree']
re.findall(r'\ba\w*\b',x)     #['aaa', 'aa', 'a', 'a', 'aa', 'aaa']
#查找长度为5的单词
#从串首匹配模式,若不匹配则返回None
re.match(r'\b[a-zA-Z]{5}\b',s)     #<re.Match object; span=(0, 5), match='apple'>
#对整个字符串(起始位置不定)匹配模式,若不匹配则返回None
re.search(r'\b[a-zA-Z]{5}\b',s)        #<re.Match object; span=(0, 5), match='apple'>#替换
#指定寻找模式(以a开头的单词)
re.sub(r'\ba\w+\b','*',s,1)    #将满足条件的字符替换为指定字符*,只替换一次:'*,approach,agree'
re.subn(r'\ba\w+\b','*',s,1)   #与上语句唯一不同之处在于,返回值为结果串与替换次数组成的元组:('*,approach,agree', 1)

2、正则对象处理

  • 相较于模块re处理,提高了处理速度,功能更强大,提高模式串复用率
方法名 功能 参数
findall 字符串所有模式匹配项 findall(str [, pos [ , endpos]])
match 字符串串首单一模式匹配项,若不匹配则返回None match(str [, pos [ , endpos]])
search 字符串整串单一模式匹配项,若不匹配则返回None search(str [, pos [ , endpos]])
sub 字符串替换,返回结果为替换后字符串 sub(repl , str [, count=0])
subn 字符串替换,返回结果为替换后字符串与替换次数组成的元组 subn(repl , str [, count=0])
split 根据模式匹配项,分割字符串 split(str [, maxspilt=0])

正则对象处理的方法名与正则模块处理相同:

#导入正则模块处理包re
import re
#创建字符串:
s = 'apple,approach,agree'
x = ' aaa aa a x a aa aaa'
#查找以字母'a'开头的单词,创建正则对象
pattern = re.compile(r'\ba\w*\b')
#查找
pattern.findall(s)      #['apple', 'approach', 'agree']
pattern.findall(x)      #['aaa', 'aa', 'a', 'a', 'aa', 'aaa']
#查找长度为5的单词,创建正则对象
pattern = re.compile(r'\b[a-zA-Z]{5}\b')
#从串首匹配模式,若不匹配则返回None
pattern.match(s)        #<re.Match object; span=(0, 5), match='apple'>
#对整个字符串(起始位置不定)匹配模式,若不匹配则返回None
pattern.search(s)       #<re.Match object; span=(0, 5), match='apple'>#替换
#指定寻找模式(以a开头的单词)
pattern = re.compile(r'\ba\w+\b');
pattern.sub('*',s,1)  #将满足条件的字符替换为指定字符*,只替换一次:'*,approach,agree'
pattern.subn('*',s,1) #与上语句唯一不同之处在于,返回值为结果串与替换次数组成的元组:('*,approach,agree', 1)#分割字符串,指定多个可能的分隔符
pattern = re.compile(r'[,.\|]')
pattern.split(s)        #['apple', 'approach', 'agree']
#分割字符串,指定多个可能的分隔符、最大分割次数
pattern.split(s,1)      #['apple', 'approach,agree']

【Python基础】字符串 正则表达式相关推荐

  1. python 基础学习 正则表达式1(规则)

    正则表达式: *正则表示式(或RE)是一种小型的.高度专业化的编程语言,(在python中)它内嵌在python中,并通过re模块实现. -可以为想要匹配的相应字符串指定规则 -该字符串集可能包含英文 ...

  2. 重温Python基础——字符串

    哈喽,兄弟们, 本文带大家复习一下Python基础中的字符串,不知道大家还记得多少内容呢? 字符串 1.字符串就是一系列字符 在python中,用引号括起的都是字符串,其中引号可以是单的,也可以是双的 ...

  3. python 基础 字符串烧烤流程

    字符串详细解答及有关函数 表现形式 特殊情况的输出:转义字符 输入输出 读取与切片 字符串修改及删除 字符串常用函数解析 常用内置函数 大白话和你一起学python,最基础的内容,希望和大家一起学习, ...

  4. Python基础-字符串(字符串常用函数/操作/字符串遍历)

    字符串就是一串字符, 表示文本类型的数据, 可以用"一对双引号"或者'一对单引号'定义一个字符串, 字符串定义格式为 字符串变量名 = '字符串的文本内容' 常用函数/操作 获取字 ...

  5. Python基础——字符串的使用

    一.字符串的驻留机制   在Python中字符串是基本数据类型,是一个不可变的字符序列,即不具备增删改等操作.   什么叫字符串驻留机制?   仅保存一份相同且不可变字符串的方法,不同的值被存放在字符 ...

  6. Python基础库-正则表达式库

    ​ ​ 活动地址:CSDN21天学习挑战赛 文章目录 1.正则表达式 1.1正则表达概述 1.2正则表达式库 1.3一个简单的例子:检查用户输入的邮箱地址是否合法 2.正则表达式-原子 3.正则表达式 ...

  7. 【python基础】正则表达式总结

    1.re模块 1.1.re.match函数 1.1.1.函数功能 起始匹配,未匹配到返回None. 1.1.2.函数语法 re.match(pattern, string, flags=0) 3参数说 ...

  8. Python基础之正则表达式

    正则表达式 文章目录 正则表达式 动机 简介 元字符使用 普通字符 或关系 匹配单个字符 匹配字符集 匹配字符集反集 匹配字符串开始位置 匹配字符串的结束位置 匹配字符重复 匹配任意(非)数字字符 匹 ...

  9. python基础字符串(二)

    解释: 如何定义字符串,单引号和双引号,三个单引号. "\" 反斜杠是转义的意思 # 这里\n是换行 b = '''hhehe\nlala'''# 反斜杠的使用 c = " ...

  10. Python基础——字符串、列表、元组

    字符串常用方法 主要包括:replace.find.count.split.partition.upper.lower.strip.join.format - replace(old,new) 对字符 ...

最新文章

  1. 从玉农业谋定塞外-丰收节交易会·林裕豪:巴彦淖尔深圳签约
  2. 获取web.py上面的示例code
  3. 文件操作中关于文件句柄的相关操作
  4. tensorflow:双线性插值反卷积
  5. Vue3+Vant+Vue-cli+Restful api实战—图书商城移动端
  6. 大火金九银十!秋季借势海报PSD分层模板,看谁最能俘获你的心
  7. GridView常用代码 (转)
  8. SpringMVC 搭建遇到的坑
  9. 自己的HTML5 播放器
  10. 估计理论(2):Cramer-Rao下限
  11. gnome桌面终端程序 Guake
  12. 基于Myrocks和spider构建分布式数据库
  13. 【深入理解计算机系统】CSAPP-实验四:ArchLab全网最详细
  14. 蓝牙4.0 BLE传统配对绑定过程
  15. 广义相对论-学习记录3-第二章-狭义相对论2
  16. linux monitor 命令,Process Monitor(简称Procmon)发布Linux版,附使用方法
  17. 明确不站队BAT,帆软——这家只有几百人的BI公司靠什么赢得生存?
  18. 29-折半查找法的使用
  19. [题解]LuoGu2698: [USACO12MAR]花盆Flowerpot
  20. PTC指定位置安装许可服务器,proe野火3.0安装问题之“许可证管理已成功安装,但不能启动,请参阅日志文件..”我自己的解决方案(原...

热门文章

  1. 【真会玩】- SpringCloud Netflix 实战笔记 -【Eureka】
  2. 5G-智慧交通典型应用场景及解决方案
  3. 阿里P8终于总结出:SpringCloud+Docker+Tomcat+Nginx实战文档了
  4. 武汉理工计算机研究生就业去向统计,21考研择校:武汉理工大学就业率和薪酬情况统计!...
  5. c语言结构类型ppt,C语言 第10章 结构类型与其他构造类型.ppt
  6. CPU性能分析优化套路
  7. 高数---第十章无穷级数---幂级数---收敛区间,函数展开
  8. opencv实现camera模组的暗电流和lenshading补偿
  9. 广西职业技术学院计算机专业分数线,广西职业技术学院
  10. 世界各国人口及国土面积及资源排名~