Python字符串(Str)详解
字符串是 Python 中最常⽤的数据类型。我们可以使⽤引号('或")来创建字符串。
  创建字符串很简单,只要为变量分配⼀个值即可
字符串的格式
b = "hello itcast"
#    或者
b = 'hello itcast'
双引号或者单引号中的数据,就是字符串
字符串连接的⽅法
直接通过加号(+)操作符连接
a = "str1"
b = "str2"
c = a + b
print("a:%s" % a)  # a:str1
print("b:%s" % b)  # b:str2
print("c:%s" % c)  # c=a+b:str1str2
join⽅法
join():连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接⽣成⼀个新的字符串
'sep'.join(seq)
参数说明
sep:分隔符。可以为空
seq:要连接的元素序列、字符串、元组、字典
上⾯的语法即:以sep作为分隔符,将seq所有的元素合并成⼀个新的字符串
返回值:返回⼀个以分隔符sep连接各个元素后⽣成的字符串
listStr = ['python', 'tab', '', 'wqetab', 'ew']
print(listStr)
website = '++'.join(listStr)
print(website) # python++tab++
替换
例⼦:
a = "str1"
b = "str2"
e = "===%s===" % (a + b)
print("a:%s" % a)  # a:str1
print("b:%s" % b)  # b:str2
print("e:%s"%e)    # e:===str1str2===
总结
下⾯再来说⼀下三种⽅法的不同
⽅法1,使⽤简单直接,但是⽹上不少⼈说这种⽅法效率低
  之所以说python 中使⽤ + 进⾏字符串连接的操作效率低下,是因为python中字符串是不可变的类型,使⽤ + 连接两个字符串时会⽣成⼀个新的字符串,⽣成新的字符串就需要重新申请内存,当连续相加的字符串很多时(a+b+c+d+e+f+...) ,效率低下就是必然的了
⽅法2,使⽤略复杂,但对多个字符进⾏连接时效率⾼,只会有⼀次内存的申请。⽽且如果是对list的字符进⾏连接的时候,这种⽅法必须是⾸选
⽅法3:字符串格式化,这种⽅法⾮常常⽤
  加号连接效率低是在连续进⾏多个字符串连接的时候出现的,如果连接的个数较少,加号连接效率反⽽⽐join连接效率⾼
Python字符串运算符
下表实例变量 a 值为字符串 "Hello",b 变量值为 "Python":
描述实例
+字符串连接>>>a + b
'HelloPython'
* 重复输出字符串>>>a ✲2
'HelloHello'
[]通过索引获取字符串中字符>>>a[1]
'e'
[ : ]截取字符串中的⼀部分>>>a[1:4]
'ell'
in成员运算符- 如果字符串中包含给定的字符返回 True >>>"H" in a
True
not
in成员运算符- 如果字符串中不包含给定的字符返回 True >>>"M" not in a
True
r/R原始字符串 - 原始字符串:所有的字符串都是直接按照字⾯的意思来使⽤,没有转义特殊或不能打印的字符。原始字符串除在字符串的第⼀个引号前加上字母"r"(可以⼤⼩写)以外,与普通字符串有着⼏乎完全相同的语法。>>>print r'\n' \n
>>> print R'\n' \n
字符串操作
  关于字符串的⽅法还是⽐较多的,我把感觉常⽤的分了下类,把它们写了下来希望对你们有个参考,最后也把关于字符串的⽅法在在最后附着,有空可以看看
字符串的格式操作
去掉不需要的字符(默认为空格)
s.strip()去掉字符串两端字符
lstrip()去掉字符串左端字符
rstrip()去掉字符串右端字符
s = ' abc 123 '
s.strip()
# 'abc 123'
s.lstrip()
# 'abc 123 '
s = '-----ab+++++'
s.strip('-+')  # 'ab'
字符串在输出时的对齐
S.ljust(width,[fillchar]) #输出width个字符,S左对齐,不⾜部分⽤fillchar填充,默认的为空格。
S.rjust(width,[fillchar]) #右对齐
<(width, [fillchar]) #中间对齐
S.zfill(width) #把S变成width长,并在右对齐,不⾜部分⽤0补⾜
使⽤format⽅法()
s='abc'
format(s,'>10')
# '      abc'
对字符串的⼤⼩写字母进⾏转换
S.lower() #⼩写
S.upper() #⼤写
S.swapcase() #⼤⼩写互换
S.capitalize() #⾸字母⼤写
String.capwords(S) #这是模块中的⽅法。它把S⽤split()函数分开,然后⽤capitalize()把⾸字母变成⼤写,最后⽤join()合并到⼀起>>> s = 'stiven'
>>> s.swapcase()
'STIVEN'
>>> s = 'SHAW'
>>> s.swapcase()
'shaw'
字符串的截取(重点)
切⽚的语法:字符串[起始:结束:步长]
注意:选取的区间属于左闭右开型,即从"起始"位开始,到"结束"位的前⼀位结束(不包含结束位本⾝)。
str[0:3] #截取第⼀位到第三位的字符
str[:] #截取字符串的全部字符
str[0::2]# 以步长为2,截取字符串的全部字符
repl,就是replacement,被替换,的字符串的意思。repl是字符串
string,即表⽰要被处理,要被替换的那个string字符串。
s='python|c|java|c++|php'
# 'python语⾔:c语⾔:java语⾔:c++语⾔:php'
S.split([sep, [maxsplit]]) #以sep为分隔符,把S分成⼀个list。maxsplit表⽰分割的次数。默认的分割符为空⽩字符
re.split(format,str) # format:正则表达式,str:字符串;需要导⼊re ⼯具箱
import re
s='python|c|java|c++|php'
re.split(r'[|]',s)
# ['python', 'c', 'java', 'c++', 'php']
re.sub(pattern, repl, string) 对于输⼊的⼀个字符串,利⽤正则表达式(的强⼤的字符串处理功能),去实现(相对复杂的)字符串替换处理,然后返回被替换后的字符串
pattern,表⽰正则中的模式字符串
repl,就是replacement,被替换,的字符串的意思。repl可以是字符串,也可以是函数
string,即表⽰要被处理,要被替换的那个string字符串。
import re
s='python|c|java|c++|php'
re.sub(r'[|]',"语⾔:",s)
'python语⾔:c语⾔:java语⾔:c++语⾔:php'
符串的测试、判断函数
strcmp(sStr1,sStr2) #⽐较字符串
S.startswith(prefix[,start[,end]]) #是否以prefix开头
S.isalnum() #是否全是字母和数字,并⾄少有⼀个字符
S.isalpha() #是否全是字母,并⾄少有⼀个字符
S.isdigit() #是否全是数字,并⾄少有⼀个字符
S.isspace() #是否全是空⽩字符,并⾄少有⼀个字符
S.islower() #S中的字母是否全是⼩写
S.isupper() #S中的字母是否便是⼤写
S.istitle() #S是否是⾸字母⼤写的
字符串中的搜索
S.find(substr, [start, [end]]) #返回S中出现substr的第⼀个字母的标号,如果S中没有substr则返回-1。start和end作⽤就相当于在S[start:end]中搜索
S.index(substr, [start, [end]]) #与find()相同,只是在S中没有substr时,会返回⼀个运⾏时错误
S.rfind(substr, [start, [end]]) #返回S中最后出现的substr的第⼀个字母的标号,如果S中没有substr则返回-1,也就是说从右边算起的第⼀次出现的substr的⾸字母标号
S.rindex(substr, [start, [end]])
字符串的⽅法的api
⽅法描述
string.capitalize()把字符串的第⼀个字符⼤写
<(width)返回⼀个原字符串居中,并使⽤空格填充⾄长度 width 的新字符串
⽅法描述
end=len(string))返回 str 在 string ⾥⾯出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
string.decode(encoding='UTF-8',
errors='strict')以 encoding 指定的编码格式解码 string,如果出错默认报⼀个 ValueError 的异常,除⾮ errors 指定的是 'ignore' 或者'replace' de(encoding='UTF-8',
errors='strict')以 encoding 指定的编码格式编码 string,如果出错默认报⼀个ValueError 的异常,除⾮ errors 指定的是'ignore'或者'replace' dswith(obj, beg=0,
end=len(string))检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.
python 正则表达式 空格
string.find(str, beg=0,
end=len(string))检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1
string.format()格式化字符串
string.index(str, beg=0,
end=len(string))跟find()⽅法⼀样,只不过如果str不在 string中会报⼀个异常.
string.isalnum()如果 string ⾄少有⼀个字符并且所有字符都是字母或数字则返回 True,否则返回 False
string.isalpha()如果 string ⾄少有⼀个字符并且所有字符都是字母则返回 True,否则返回 False
string.isdecimal()如果 string 只包含⼗进制数字则返回 True 否则返回 False.
string.isdigit()如果 string 只包含数字则返回 True 否则返回 False.
string.islower()如果 string 中包含⾄少⼀个区分⼤⼩写的字符,并且所有这些(区分⼤⼩写的)字符都是⼩写,则返回 True,否则返回 False
string.isnumeric()如果 string 中只包含数字字符,则返回 True,否则返回 False
string.isspace()如果 string 中只包含空格,则返回 True,否则返回 False.
string.istitle()如果 string 是标题化的(见 title())则返回 True,否则返回 False
string.isupper()如果 string 中包含⾄少⼀个区分⼤⼩写的字符,并且所有这些(区分⼤⼩写的)字符都是⼤写,则返回 True,否则返回 False
string.join(seq)以 string 作为分隔符,将 seq 中所有的元素(的字符串表⽰)合并为⼀个新的字符串
string.ljust(width)返回⼀个原字符串左对齐,并使⽤空格填充⾄长度 width 的新字符串
string.lower()转换 string 中所有⼤写字符为⼩写.
string.lstrip()截掉 string 左边的空格
string.maketrans(intab, outtab])maketrans() ⽅法⽤于创建字符映射的转换表,对于接受两个参数的最简单的调⽤⽅式,第⼀个参数是字符串,表⽰需要转换的字符,第⼆个参数也是字符串表⽰转换的⽬标。
max(str)返回字符串 str 中最⼤的字母。
min(str)返回字符串 str 中最⼩的字母。
string.partition(str)有点像 find()和 split()的结合体,从 str 出现的第⼀个位置起,把字符串 string 分成⼀个 3 元素的元组
(string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string.
unt(str1))把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次.
string.rfind(str, beg=0,end=len(string)
)类似于 find()函数,不过是从右边开始查.
string.rindex( str,
beg=0,end=len(string))类似于 index(),不过是从右边开始.
string.rjust(width)返回⼀个原字符串右对齐,并使⽤空格填充⾄长度 width 的新字符串
string.rpartition(str)类似于 partition()函数,不过是从右边开始查.
string.rstrip()删除 string 字符串末尾的空格.
string.split(str="",
unt(str))以 str 为分隔符切⽚ string,如果 num有指定值,则仅分隔 num 个⼦字符串
string.splitlines([keepends])按照⾏('\r', '\r\n', \n')分隔,返回⼀个包含各⾏作为元素的列表,如果参数 keepends 为 False,不包含换⾏符,如果为 True,则保留换⾏符。
string.startswith(obj,
beg=0,end=len(string))检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查.
string.strip([obj])在 string 上执⾏ lstrip()和 rstrip()
string.swapcase()翻转 string 中的⼤⼩写
string.title()返回"标题化"的 string,就是说所有单词都是以⼤写开始,其余字母均为⼩写(见 istitle())
string.upper()转换 string 中的⼩写字母为⼤写
string.zfill(width)返回长度为 width 的字符串,原字符串 string 右对齐,前⾯填充0
string.isdecimal()isdecimal()⽅法检查字符串是否只包含⼗进制字符。这种⽅法只存在于unicode对象。