用Python做算法,对字符串的操作用到的不多。
但是用Python来处理日常生活、工作中的许多问题,比如文本处理,办公自动化等就常常要用到字符串的操作了。
所以,有必要把Python中的字符串操作方法总结一下。
声明:博主(昊虹图像算法)写这篇博文时,用的Python的版本号为3.9.10。
在Pyton3中,字符串对象的类名为“str”。
示例代码如下:
# 字母大写转换成小写
s1 = 'SUWENHAO andg WangHong'
s2_1 = s1.lower()
s2_2 = s1.casefold()
# 字母小写转换成大写
s3 = 'wanghong'
s4 = s3.upper()
# 字母大写转换小写,小写转换成大写
s5 = 'SuWenHao'
s6 = s5.swapcase()
# 将每一个单中大写和首字母大写
s7 = 'andy is a boy'
s8_1 = s7.title() # 每一个单词都大写
s8_2 = s7.capitalize() # 只大写第一个单词
S.find(substr,[start,[end]])—返回S中出现substr的第一个字母的标号,如果S中没有substr则返回-1,start和end作用就相当于在S[start:end]中搜索。
示例代码如下:
s1 = 'i love zi heng and zi man'
zi_index = s1.find('zi')
运行结果如下:
从上面的结果我们可以看出,位置索引是从0开始的。
如果想得到字符串substr出现的最后位置,可以用函数rfind()实现。
函数index()跟find()方法一样,只不过如果substr不在 string中会报出一个异常,其示例代码如下:
str.index(str, beg=0, end=len(string))
s1 = 'i love zi heng and zi man'
zi_index = s1.index('zi')
ci_index = s1.index('ci')
同样,如果想得到字符串substr出现的最后位置,可以用函数rindex()实现。
示例代码如下:
s1 = 'i love zi heng and zi man'
zi_bool = 'zi' in s1
hong_bool = 'hong' in s1
示例代码如下:
s1 = 'i love zi heng and zi man'
zi_bool = 'zi' not in s1
hong_bool = 'hong' not in s1
str.count(sub, start= 0,end=len(string))
sub – 搜索的子字符串
start – 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。
end – 字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置。
示例代码如下:
s1 = 'i love zi heng and zi man'
zi_count = s1.count('zi')
运行结果如下:
分析:字符串“zi”在s1中出现了两次,所以结果为2。
str.max(str)
str.min(str)
S.replace(oldstr,newstr,[count])—把S中的oldstar替换为newstr,count为最多做多少次替换次数,count的默认值为-1,代表替换所有。
示例代码如下:
s1 = 'i love zi heng and zi man'
s2 = s1.replace('zi', 'su zi', 1) # 最多替换一次
s3 = s1.replace('zi', 'su zi', 2) # 最多替换两次
s4 = s1.replace('zi', 'su zi') # 替换所有
S.strip([chars])—把S左右两端chars中有的字符全部去掉,一般用于去除空格。
S.lstrip([chars])—把S左端chars中所有的字符全部去掉。
S.rstrip([chars])—把S右端chars中所有的字符全部去掉。
示例代码如下:
s1 = '00000003210Runoob01230000000'
s2_both = s1.strip('0') # 去除首尾字符"0"
s2_left = s1.lstrip('0') # 去除左端的字符"0"
s2_right = s1.rstrip('0') # 去除右端的字符"0"
s3 = ' Runoob '
s4_both = s3.strip(' ') # 去除首尾空格
s4_left = s3.lstrip(' ') # 去除左端空格
s4_right = s3.rstrip(' ') # 去除右端空格
这些操作的示例代码就暂不上了。
示例代码如下:
str1 = 'hello suwenhao'
str2 = str1[:6] + 'wang hong!'
print("输出 :", str2, 'Nice to meet you!')
上面代码中的str2是由字符串str1[:6] 和字符串 ‘wang hong!’ 连接起来的。
字符串str1[:6]是截取str1的第0到5个,即前6个。
运行结果如下:
示例代码如下:
str1 = 'abc'
str2 = str1*3
示例代码如下:
str1 = 'abcdef'
str2 = str1[:3]
print(r'i love you \n\r')
print(R'i hate you \n\r')
运行结果如下:
从上面的代码和结果来看,在字符串前加小写的r和大写的R都可以实现这个效果。
示例代码如下:
hi = '''hi
there'''
print(hi)
运行结果如下:
三引号让程序员从引号和特殊字符串的泥潭里面解脱出来,自始至终保持一小块字符串的格式是所谓的WYSIWYG(所见即所得)格式的。
一个典型的用例是,当你需要一块HTML或者SQL时,这时当用三引号标记,使用传统的转义字符体系将十分费神。
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。
Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。
它将世界上所有的文字用2个字节统一进行编码。Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位。
python2.x默认的字符编码是ASCII,默认的文件遍码也是ASCII.
python 3.x默认的字符编码是unicode,默认的文件编码是utf-8。
所以,其实将字符串以Unicode码进行编码主要是针对python2.x。
具体来说,在Python中可按下面这样定义一个字符串由Unicode码进行编码。
示例代码如下:
str1 = u'Hello World !'
引号前小写的"u"表示这里创建的是一个 Unicode 字符串。如果你想加入一个特殊字符,可以使用 Python 的 Unicode-Escape 编码。如下例所示:
str1 = u'Hello\u0020World !'
print(str1)
运行结果如下所示:
被替换的 \u0020 标识表示在给定位置插入编码值为 0x0020 的 Unicode 字符(空格符)。
编码:
str.encode(encoding='UTF-8',errors='strict')
encoding – 把字符串用什么码进行编码,如UTF-8、gb2312、gbk、 big5…等
errors – 设置不同错误的处理方案。默认为 ‘strict’,意为编码错误引起一个UnicodeError。 其他可能得值有 ‘ignore’, ‘replace’, ‘xmlcharrefreplace’, ‘backslashreplace’ 以及通过 codecs.register_error() 注册的任何值。
解码:
str.decode(encoding='UTF-8',errors='strict')
encoding – 原来的字符串是什么码进行编码的,如UTF-8、gb2312、gbk、 big5…等
errors – 设置不同错误的处理方案。默认为 ‘strict’,意为编码错误引起一个UnicodeError。 其他可能得值有 ‘ignore’, ‘replace’, ‘xmlcharrefreplace’, ‘backslashreplace’ 以及通过 codecs.register_error() 注册的任何值。
注意:函数decode是把字符串解码成unicode编码,而不是encoding代表的编码,参数encoding只是告诉函数我原来的编码是什么。
上面两个函数使用示例如下:
str1 = 'this is string example'
str2 = str1.encode('big5', 'strict')
str3 = str2.decode('big5', 'strict') # 将big5解码成unicode编码
str.center(width[, fillchar])
示例:
str1 = 'haohong'
str2 = str1.center(20, '*')
print(str2)
ljust() 方法返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。
str.ljust(width[, fillchar])
width – 指定字符串长度。
fillchar – 填充字符,默认为空格。
使用示例如下:
str1 = "i love my city"
print(str1.ljust(30, '#'))
rjust() 方法返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。
str.rjust(width[, fillchar])
width – 指定字符串长度。
fillchar – 填充字符,默认为空格。
使用示例如下:
str1 = "i love my city"
print(str1.rjust(30, '#'))
原型如下:
str.zfill(width)
示例代码如下:
str1 = "i love my city"
print(str1.zfill(30))
str.endswith(suffix[, start[, end]])
suffix – 该参数可以是一个字符串或者是一个元素。
start – 字符串中的开始位置。
end – 字符中结束位置。
如果字符串含有指定的后缀返回True,否则返回False。
示例代码如下:
str1 = 'this is string example'
str2 = 'example'
str3 = 'fuck'
end_bool1 = str1.endswith(str2)
end_bool2 = str1.endswith(str3)
注意:成员函数removesuffix()是Python3.9中新增的。
示例代码如下:
str1 = 'TestHook'
str2 = str1.removesuffix('Hook')
str.startswith(str, beg=0,end=len(string));
str – 检测的字符串。
strbeg – 可选参数用于设置字符串检测的起始位置。
strend – 可选参数用于设置字符串检测的结束位置。
如果检测到字符串则返回True,否则返回False。
示例代码如下:
str1 = 'this is string example'
str2 = 'thi'
str3 = 'fuck'
end_bool1 = str1.startswith(str2)
end_bool2 = str1.startswith(str3)
注意:成员函数removeprefix()是Python3.9中新增的。
示例代码如下:
str1 = 'TestHook'
str2 = str1.removeprefix('Test')
string.expandtabs(tabsize=8)
把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8。
示例代码如下:
str1 = 'AAA\tBBB' # \t代表制表符
str2 = str1.expandtabs(tabsize=8)
print(str1)
print(str2)
这个的详细情况和使用示例见博文 https://blog.csdn.net/wenhao_ir/article/details/125390532
这种格式化字符串的方法通常与字典结合使用,字典本质上就是一个键与值的映身(map)嘛。
示例代码如下:
my_dict = {'name': 'SWH', 'job_title': 'Software Engineer'}
print('My name is {name} and I am a {job_title}'.format_map(my_dict))
my_dict = {'name': 'SWH', 'job_title': 'Software Engineer'}
str1 = 'My name is {name} and I am a {job_title}'.format_map(my_dict)
print(str1)
示例代码如下:
str1 = "-"
seq = ("a", "b", "c") # 字符串序列
print(str1.join(seq))
运行结果如下:
可利用它将元组或列表转换为字符串,详情见 https://blog.csdn.net/wenhao_ir/article/details/125960082
str.maketrans(intab, outtab)
示例代码如下:
intab = "aeiou"
outtab = "12345"
trantab = str.maketrans(intab, outtab)
str1 = "this is string example....wow!!!"
print(str1.translate(trantab))
partition() 方法用来根据指定的字符串作为分割符将字符串进行分割。
如果字符串包含指定的分隔符,则返回一个3元的元组,第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串。
示例代码如下:
str1 = "blog.csdn.net/wenhao_ir"
print(str1.partition("net/"))
如果想从右边开始查找分割符,则可用函数rpartition() 实现。
str.split(str="", num=string.count(str))
split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串。
str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
num – 分割次数。默认为 -1, 即分隔所有。
示例代码如下:
txt = "Google#CSDN#Taobao#Facebook"
x1 = txt.split("#")
x2 = txt.split("#", 1)
x3 = txt.split("#", 2)
print(x1)
print(x2)
print(x3)
运行结果如下:
如果希望从右边开始分割,则可以使用函数rsplit()实现。
str.splitlines([keepends])
keepends – 在输出结果里是否保留换行符(‘\r’, ‘\r\n’, \n’),默认为 False,不包含换行符,如果为 True,则保留换行符。
示例代码如下:
str1 = 'ab c\n\nde fg\rkl\r\n'
print(str1.splitlines())
str2 = 'ab c\n\nde fg\rkl\r\n'
print(str2.splitlines(True))
本文参考自:
https://blog.csdn.net/wenhao_ir/article/details/125100220