Python __ 字符串
基础知识
-
字符串是 Python 中最常用的数据类型。
-
Python 不支持单字符类型。
单字符即长度为1的字符串 -
字符串类型是不可变类型。
对字符串的操作方法都不会改变原来字符串的值;字符串相加之后会开辟新的空间,即形成新的字符串。 -
python字符串是一个定长的字符数组,通过下标控制长度,没有结束标识。
-
既可以用单引号或者双引号,也可以用三引号创建字符串。
在三引号字符串中可以包含换行回车等特殊字符
输出
在字符串前加字母r或R,表示原始字符串,其中的所有字符都表示原始的含义,而不会进行任何转义。
比如说:
print("smith\\exam1\\test.txt")
print("smith\exam1\\test.txt")
print("smith\exam1\test.txt")
print(r"smith\exam1\test.txt")
# 结果
#smith\exam1\test.txt
#smith\exam1\test.txt
#smith\exam1 est.txt
#smith\exam1\test.txt
匹配find
假设s和t都是字符串变量,并且t不是s的子串,那么表达式s.find(t)的值是-1
假设s和t都是字符串变量,并且t不是s的子串,那么表达式s.index(t)的值是报异常
拼接
去除替换
内置函数
去除空格:
str=input().strip()
正则表达式
过滤:findall
作用:
- 在字符串中找到正则表达式所匹配的所有子串,
- 并返回一个列表,列表包含所有于给定模式匹配的子串
如果有多个匹配模式,则返回元组列表,
如果没有找到匹配的,则返回空列表。
语法格式:
findall(pattern,string)
pattern: 模式串
string : 待匹配的字符串。
替换:sub
sub(pat,repl,string)
pat: 模式串
repl: 将要替换成的串
string : 待匹配的字符串
作用:
将string中的所有与模式pat匹配的子串都替换为repl里面的字符串
样例:
将str中的k都删除掉
str=input().strip()
k=input().strip()
str=re.sub(k,"",str)
常用正则表达式
[]
用于表示一个字符集合。在一个集合中:
字符可以单独列出,比如 [amk] 匹配 'a', 'm', 或者 'k'。
可以表示字符范围,通过用 '-' 将两个字符连起来。比如 [a-z] 将匹配任何小写ASCII字符, [0-5][0-9] 将匹配从 00 到 59 的两位数字, [0-9A-Fa-f] 将匹配任何十六进制数位。 如果 - 进行了转义 (比如 [a-z])或者它的位置在首位或者末尾(如 [-a] 或 [a-]),它就只表示普通字符 '-'。
特殊字符在集合中,失去它的特殊含义。比如 [(+)] 只会匹配这几个文法字符 '(', '+', '', or ')'。
字符类如 \w 或者 \S (如下定义) 在集合内可以接受,它们可以匹配的字符由 ASCII 或者 LOCALE 模式决定。
不在集合范围内的字符可以通过 取反 来进行匹配。如果集合首字符是 '^' ,所有 不 在集合内的字符将会被匹配,比如 [^5] 将匹配所有字符,除了 '5', [^^] 将匹配所有字符,除了 '^'. ^ 如果不在集合首位,就没有特殊含义。
在集合内要匹配一个字符 ']',有两种方法,要么就在它之前加上反斜杠,要么就把它放到集合首位。比如, [()[]{}] 和 [{}] 都可以匹配括号。
[0-9a-fA-F]
判断
判断大小写
isupper() 判断是否都为大写
islower() 判断是否都为小写
istitle() 判断所有的单词首字符都是大写
判断数据类型
isspace() 判断所有的字符都是空格
isalnum() 判断所有的字符都是数字或字母
isalpha() 判断所有的字符都是字母
isdigit() 判断是不是数字
转化
大小写转化
将字符串首字母变为大写:capitalize()
将字符串每个单词首字母变为大写:title()
转化成二进制
- 使用format
a = input()
atemp = int(format(a, "b"))
#转化为用0补位的31位二进制数,然后再转化为list
cnt2=list(format(b,"031b"))
- 使用bin函数
ntemp=bin(n)
编码和解码
decode() 方法以 encoding 指定的编码格式解码字符串。默认编码为字符串编码。
encode() 方法以 encoding 指定的编码格式编码字符串;得到bytes字节串。
- str.decode(encoding='UTF-8',errors='strict')
- str.encode(encoding='UTF-8',errors='strict')
encoding -- 要使用的编码,如"UTF-8"。
errors -- 设置不同错误的处理方案。
str = "你好Hello"
str = str.encode('utf-8','strict')
print ("Encoded String: " , str)
print ("Decoded String: " , str.decode('utf-8','strict'))
# 结果
#Encoded String: b'\xe4\xbd\xa0\xe5\xa5\xbdHello'
#Decoded String: 你好Hello
ASCII码和字符的转化
转为字符chr(a)
转为ASCII码ord(c))
样例:
num=[eval(x) for x in input().split()]
num.sort()
for i in num[:-1]:
print(chr(i),end="<")
print(chr(num[-1]) )
将字符串序列转换成字符串
使用'separator'.join()方法
Separator:生成的字符串之间的分隔符,需要注意的是最后一个字符串没有该分隔符
>>>num= input().split()
>>>print("".join(num))
>>>print("".join(num))
qwer
q,w,e,r
附两个题目:
错误: 已知x为非空字符串,那么表达式 ''.join(x.split()) == x 的值一定为True。
正确: 已知x为非空字符串,那么表达式 ','.join(x.split(',')) == x 的值一定为True。
原因:split有两个参数,分隔符和分隔数量限制,默认下分隔符数量是无限大;而传入了分隔符,分隔符数量限制就是1
所以当字符串x中有连续的多个空格时,第一条语句就错了。
x="sdf fsd"#中间六个空格
print(len(x.split())) #结果:2
print(len(x.split(" "))) #结果:7
print(len(x.split(" ",1))) #结果:2
print(len(x.split(" ",2))) #结果:3
print(len(x.split(" ",10)))#结果:7