python3的str有各种各样的操作方法,下面我来一一列出:
目录
字母操作
字符/字符串寻找
条件判断
capitalize() :将开头首字母改为大写,如果字符串开头非小写字母(如开头为大写字母、数字、空格等)则无效。
>>> s = 'elias find cookie'
>>> s.capitalize()
'Elias find cookie'
>>> s = 'Elias find cookie'
>>> s.capitalize()
'Elias find cookie'
>>> s = '01.lias find cookie'
>>> s.capitalize()
'01.lias find cookie'
>>> s = ' Elias find cookie'
>>> s.capitalize()
' elias find cookie'
title():以空格、符号、数字等隔开的首字母大写
>>> s = '01.lias find cookie'
>>> s.title()
'01.Lias Find Cookie'
>>> s = 'elias find cookie'
>>> s.title()
'Elias Find Cookie'
>>> s = '%elias find cookie'
>>> s.title()
'%Elias Find Cookie'
upper():所有字母全大写
>>> s = '1a2b3c4d5e6'
>>> s.upper()
'1A2B3C4D5E6'
lower():所有字母全小写
>>> a = '1A2B3C4D5E6'
>>> a.lower()
'1a2b3c4d5e6'
swapcase():全部字符大小写翻转
>>> s = '1UG5gj8JO5%&Hy'
>>> s.swapcase()
'1ug5GJ8jo5%&hY'
find(sub, start, end)返回符合sub的第一个索引(即通过sub找索引),可通过start 和end 指定索引范围,找不到sub则返回-1。start和 end可以不填入,默认填入的sub后的第一个为strat,第二个为end。
>>> s = 'a1ch2ie283WNDLEWKUI3dheiuei'
>>> s.find('h')
3
>>> s.find('h',4)
21
>>> s.find('h',4,10)
-1
>>> s.find('h2') #字符串也可以,返回最小索引
3
index(sub, start, end)和find使用方法一样,但是如果找不到会报错
>>> s = 'a1ch2ie283WNDLEWKUI3dheiuei'
>>> s.index('h')
3
>>> s.index('h',4)
21
>>> s.index('h',4,10)
Traceback (most recent call last):
File "", line 1, in
s.index('h',4,10)
ValueError: substring not found #目标字符未在指定的索引内找到
>>> s.index('h2') #字符串也可以,返回最小的索引
3
注:条件判断返回的皆是bool
isalpah()是否全由字母字符串组成
>>> s = 'a1ch2ie283WNDLEWKUI3dheiuei'
>>> s.isalpha()
False
>>> s = 'asdfgh'
>>> s.isalpha()
True
isdigit()是否全由数字组成
>>> s = 'asdfgh123'
>>> s.isdigit()
False
>>> s = '123456'
>>> s.isdigit()
True
isalnum()是否全由数字、字母、数字和字母组成
>>> s = 'asdfgh123'
>>> s.isalnum()
True
>>> s = '123'
>>> s.isalnum()
True
>>> s = 'abc'
>>> s.isalnum()
True
>>> s = '%1122'
>>> s.isalnum()
False
>>> s = '*qas'
>>> s.isalnum()
False
isupper()是否全大写
>>> s = '*WQDWQ:"<.LLJU'
>>> s.isupper()
True
>>> s = 'eewcwe()wiud*'
>>> s.isupper()
False
islower()是否全小写
>>> s = 'eewcwe()wiud*'
>>> s.islower()
True
>>> s = '*WQDWQ:"<.LLJU'
>>> s.isupper()
True
istitle()被空格、数字、符号等隔开的首字母是否大写
>>> s = '1J6u8I9o'
>>> s.istitle
>>> s.istitle()
False
>>> s = '1T6H8G4F"W/F'
>>> s.istitle()
True
isspace()是否只由空格组成
>>> s = ''
>>> s.isspace()
False
>>> s = ' '
>>> s.isspace()
True
>>> s = ' j '
>>> s.isspace()
False
isascii()是否为ascii码,判断时必须是字符串形式,否则会报错
#ascii码的判定,官方解释是在U+0000-U+007F之间的都是ascii码
#官方文档:https://docs.python.org/3/library/stdtypes.html?highlight=isascii#str.isascii
>>> ord('a') #将单个字符转为ascii码
97
>>> ord('哈')
21704
>>> s = 21704
>>> s.isascii()
Traceback (most recent call last):
File "", line 1, in
s.isascii()
AttributeError: 'int' object has no attribute 'isascii' #纯数字会报错 必须是字符串
>>> s = '21704'
>>> s.isascii()
True
>>> s = ''
>>> s.isascii()
True
>>> s = ' '
>>> s.isascii()
True
>>> s = 'U0000'
>>> s.isascii()
True
>>> s = '/87u/09o'
>>> s.isascii()
True
isdecimal()字符是否只包含十进制字符串(我们正常使用的数字)
#在python中,二进制以0b开头表示,八进制用0o开头表示,十六进制用0x开头表示
>>> s = '120u'
>>> s.isdecimal()
False
>>> s = '010101001'
>>> s.isdecimal()
True
>>> s = '89000'
>>> s.isdecimal()
True
isidentifier()判断该字符串设为变量名是否合法,但是不太准确,它的判断方式应该不包含内置变量。可以用 keyword判断是否为内置函数,但是keyword只能判断相应一部分范围。
>>> s = 'print'
>>> s.isidentifier()
True
>>> s = 'def'
>>> s.isidentifier()
True
>>> s = 'python'
>>> s.isidentifier()
True
>>> s = 'def_1'
>>> s.isidentifier()
True
>>> s = '1'
>>> s.isidentifier()
False
>>> s = '1haha'
>>> s.isidentifier()
False
keyword.iskeyword(s)可以判断是否为内置关键字,但是不全面,比如print就可以通过测试,下图为官方给出的内置关键字。
>>> import keyword
>>> keyword.iskeyword(s)
False
>>> keyword.iskeyword(print)
False
>>> keyword.iskeyword('print')
False
>>> keyword.iskeyword('def')
True
>>> keyword.iskeyword('class')
True
isnumeric()unicode对象字符串是否只由数字组成
>>> s = '123'
>>> s.isnumeric()
True
>>> s = 'u'
>>> s.isnumeric()
False
isprintable()是否为可打印字符串
>>> s = 'hah'
>>> s.isprintable()
True
>>> s = '123'
>>> s.isprintable()
True
startswith(prefix, start, end):字符串是否是以prefix指代的字符串开始,可以指定开始、结束范围。
>>> s = 'ewfwefew23f3w2e'
>>> s.startswith('q')
False
>>> s.startswith('e')
True
>>> s.startswith('e',4)
True
>>> s.startswith('e',3,5)
False
endswith(suffix, start, end):字符串是否是以prefix指代的字符串开始,可以指定开始、结束范围。
>>> s = 'ewfwefew23f3w2e'
>>> s.endswith('e')
True
>>> s.endswith('e',3,7)
True
>>> s.endswith('e',3,9)
False
关于isdigit、isdecimal、isnumeric的区别:
isdigit():
True:unnicode数字、byte数字(单字节)、全角数字(双字节)
False:汉字数字、罗马数字
error:无
isdecimal():
True:unnicode数字、全角数字(双字节)
False:汉字数字、罗马数字
error:byte数字(单字节)
isnumeric():
True:unnicode数字、汉字数字、全角数字(双字节)
False:罗马数字
error:byte数字(单字节)
>>> s = '123' #unicode
>>> s.isdigit()
True
>>> s.isdecimal()
True
>>> s.isnumeric()
True
>>> s = '123' #全角(双字节)
>>> s.isdigit()
True
>>> s.isdecimal()
True
>>> s.isnumeric()
True
>>> s = b'1' #bytes数字
>>> s.isdigit()
True
>>> s.isdecimal()
Traceback (most recent call last):
File "", line 1, in
s.isdecimal()
AttributeError: 'bytes' object has no attribute 'isdecimal'
>>> s.isnumeric()
Traceback (most recent call last):
File "", line 1, in
s.isnumeric()
AttributeError: 'bytes' object has no attribute 'isnumeric'
s = 'II' #罗马数字
>>> s.isdigit()
False
>>> s.isdecimal()
False
>>> s.isnumeric()
False
>>> s = '四' #汉字数字
>>> s.isdigit()
False
>>> s.isdecimal()
False
>>> s.isnumeric()
True