python-字符串操作方法

本文详细介绍了Python中字符串的各种操作方法,包括字母操作、字符/字符串寻找、条件判断等。涵盖capitalize()、title()、upper()、lower()、strip()、split()、find()、rfind()、isalpha()、isdigit()等多个函数的用法,帮助理解字符串处理的常见功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

汇总:

  1. capitalize() :将开头首字母改为大写,如果字符串开头非小写字母(如开头为大写字母、数字、空格等)则无效。
  2. title():以空格、符号、数字等隔开的首字母大写
  3. upper():所有字母全大写
  4. lower():所有字母全小写
  5. swapcase():全部字符大小写翻转
  6. casefold():与lower()类似,将字串转换为小写,可用于大小写不敏感字串匹配
  7. center(width[, fillchar]):返回指定宽度width,以当前字串居中的字串,左右不足部分以fillchar来填充, 如果width不大于原字串宽度,则返回原字串
  8. ljust(width[, fillchar]):使用指定字符填充,使字符串左对齐
  9. rjust(width[, fillchar]):使用指定字符填充,使字符串右对齐
  10. -zfill(width):字符串右对齐,前面填充0,如果width小于原有子串长度,则返回原有子串
  11. count(sub[, start[, end]]):返回子串出现频率
  12. 字符串断句:str.expandtabs(tabsize=8)
  13. replace(old, new[, max]):字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。
  14. 对应关系替换
  15. strip([chars]):移除头尾指定字符(默认空格)
  16. lstrip([chars]):去左侧指定字符(默认空格)
  17. rstrip([chars]):去右侧指定字符(默认空格)
  18. split(str=”“, num=string.count(str)):将字符串分割为列表,如果参数num 有指定值,则仅分隔 num+1 个子字符串
  19. partition(str):根据指定的分隔符将字符串分割成三元数组
  20. splitlines([keepends]):按照行(‘\r’, ‘\r\n’, \n’)将字符串分割成列表,keepends – 在输出结果里是否去掉换行符(‘\r’, ‘\r\n’, \n’),默认为 False,不包含换行符,如果为 True,则保留换行符。
  21. join(sequence) 将序列中的元素以指定的字符连接生成一个新的字符串,参数sequence – 要连接的元素序列;
  22. find(sub, start, end):返回符合sub的第一个索引(即通过sub找索引),可通过start 和end 指定索引范围,找不到sub则返回-1。start和 end可以不填入,默认填入的sub后的第一个为strat,第二个为end。
  23. rfind(str, beg=0 end=len(string)):查找字符串最后一次出现的位置(从右向左查询)
  24. index(sub, start, end)和find使用方法一样,但是如果找不到会报错
  25. isalpah()是否全由字母字符串组成
  26. isdigit()是否全由数字组成
  27. isalnum()是否全由数字、字母、数字和字母组成
  28. isupper()是否全大写
  29. islower()是否全小写
  30. istitle()被空格、数字、符号等隔开的首字母是否大写
  31. isspace()是否只由空格组成
  32. isascii()是否为ascii码,判断时必须是字符串形式,否则会报错
  33. isdecimal()字符是否只包含十进制字符串(我们正常使用的数字)
  34. isidentifier()判断该字符串设为变量名是否合法,但是不太准确,它的判断方式应该不包含内置变量。可以用 keyword判断是否为内置函数,但是keyword只能判断相应一部分范围。
  35. keyword.iskeyword(s)可以判断是否为内置关键字,但是不全面,比如print就可以通过测试,下图为官方给出的内置关键字。
  36. isnumeric()unicode对象字符串是否只由数字组成
  37. isprintable()是否为可打印字符串
  38. startswith(prefix, start, end):字符串是否是以prefix指代的字符串开始,可以指定开始、结束范围。
  39. endswith(suffix, start, end):字符串是否是以prefix指代的字符串开始,可以指定开始、结束范围。
  40. 关于isdigit、isdecimal、isnumeric的区别:

字母操作

capitalize() :将开头首字母改为大写,如果字符串开头非小写字母(如开头为大写字母、数字、空格等)则无效。

>>> s='i am sam'
>>> s.capitalize()
'I am sam'
>>> 

title():以空格、符号、数字等隔开的首字母大写

>>> s='you are-welcom,sam.'
>>> s.title()
'You Are-Welcom,Sam.'

upper():所有字母全大写

>>> s='ab1Cd*ef(gH.'
>>> s.upper()
'AB1CD*EF(GH.'

lower():所有字母全小写

>>> s.lower()
'ab1cd*ef(gh.'

swapcase():全部字符大小写翻转

>>> s='ab1Cd*ef(gH.'
>>> s.swapcase()
'AB1cD*EF(Gh.'

casefold():与lower()类似,将字串转换为小写,可用于大小写不敏感字串匹配
与lower()不同的是:lower方法只对ASCII编码,对于其他语言(非汉语或英文)可以使用casefold()进行大小写转换。
‘ß’是德语字符,其小写为’ss’

>>> s='ß'
>>> s.casefold()
'ss'
>>> s.lower()
'ß'

center(width[, fillchar]):返回指定宽度width,以当前字串居中的字串,左右不足部分以fillchar来填充, 如果width不大于原字串宽度,则返回原字串

>>> s='abc'
>>> s.center(4,'*')
'abc*'
>>> s.center(5,'*')
'*abc*'
>>> s.center(11,'*')
'****abc****'

ljust(width[, fillchar]):使用指定字符填充,使字符串左对齐
rjust(width[, fillchar]):使用指定字符填充,使字符串右对齐

>>> s='icbc'
>>> s.ljust(6,'*')
'icbc**'
>>> s.rjust(6,'*')
'**icbc'

-zfill(width):字符串右对齐,前面填充0,如果width小于原有子串长度,则返回原有子串

>>> s='icbc'
>>> s.zfill(10)
'000000icbc'
>>> s.zfill(10)
'000000icbc'
>>> s='-98'
>>> s.zfill(10)
'-000000098'
>>> s='--98'
>>> s.zfill(10)
'-000000-98'
>>> s='&&98'
>>> s.zfill(10)
'000000&&98'

count(sub[, start[, end]]):返回子串出现频率

>>> s='aabbccddabcdaaaa'
>>> s.count('a')
7
>>> s.count('aa')
3
>>> s.count('aaa')
1
>>> s.count('aaaa')
1
>>> s.count('aaaaa')
0

字符串断句:str.expandtabs(tabsize=8)

>>> test1 = 'kkkkkkkl\t'
>>> test2 = 'name\tage\tgender\ttom\t23\tmale\tlucy\t18\t'
>>> test1.expandtabs(20)
'kkkkkkkl            '
>>> test2.expandtabs(20)
'name                age                 gender              tom                 23                  male                lucy                18                  '
>>> test2.expandtabs(10)
'name      age       gender    tom       23        male      lucy      18        '

replace(old, new[, max]):字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。

>>> s = "This is a good new.That is so bad.It is a big apple.It is a dog."
>>> s.replace('is','was')
'Thwas was a good new.That was so bad.It was a big apple.It was a dog.'
>>> s.replace('is','was',3)
'Thwas was a good new.That was so bad.It is a big apple.It is a dog.'

对应关系替换

>>> test =  "abcde"
>>> test1 = "12345"
>>> sjd = "ayewurbnsmrcksjfdorkgelg"
>>> qwe=str.maketrans('abcde','12345')
>>> new_sjd=sjd.translate(qwe)
>>> qwe
{97: 49, 98: 50, 99: 51, 100: 52, 101: 53}
>>> new_sjd
'1y5wur2nsmr3ksjf4orkg5lg'

strip([chars]):移除头尾指定字符(默认空格)

>>> str1 = '****       beauty   ********'
>>> str1.strip('*')
'       beauty   '

lstrip([chars]):去左侧指定字符(默认空格)

>>> str1.lstrip('*')
'       beauty   ********'

rstrip([chars]):去右侧指定字符(默认空格)

>>> str1.rstrip('*')
'****       beauty   '

split(str=”“, num=string.count(str)):将字符串分割为列表,如果参数num 有指定值,则仅分隔 num+1 个子字符串

>>> str1 = 'safdfg\nsfegewh\n12341y\n'
>>> list1 = str1.split('\n',3)
>>> list1
['safdfg', 'sfegewh', '12341y', '']

partition(str):根据指定的分隔符将字符串分割成三元数组

>>> test = 'yourswater'
>>> test.partition('s')
('your', 's', 'water')

splitlines([keepends]):按照行(‘\r’, ‘\r\n’, \n’)将字符串分割成列表,keepends – 在输出结果里是否去掉换行符(‘\r’, ‘\r\n’, \n’),默认为 False,不包含换行符,如果为 True,则保留换行符。

>>> str1 = 'ab c\n\nde fg\rkl\r\n'
>>> str1.splitlines(False)
['ab c', '', 'de fg', 'kl']
>>> str1.splitlines(True)
['ab c\n', '\n', 'de fg\r', 'kl\r\n']

join(sequence) 将序列中的元素以指定的字符连接生成一个新的字符串,参数sequence – 要连接的元素序列;

>>> list1 = ['hels','sdfg','dsg','345']
>>> '-'.join(list1)
'hels-sdfg-dsg-345'

字符/字符串寻找

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

rfind(str, beg=0 end=len(string)):查找字符串最后一次出现的位置(从右向左查询)

>>> s = 'NOSTALGIAL'
>>> s.rfind('AL')
8
>>> s.find('AL')
4

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 "<pyshell#106>", line 1, in <module>
    s.index('h',4,10)
ValueError: substring not found
>>> s.index('h2')
3

条件判断

注:条件判断返回的皆是bool
isalpah()是否全由字母字符串组成

>>> s = 'a1ch2ie283WNDLEWKUI3dheiuei'
>>> s.isalpha()
False
>>> s='abcdefg'
>>> s.isalpha()
True

isdigit()是否全由数字组成

>>> s='asdf1234'
>>> s.isdigit()
False
>>> s='1234'
>>> s.isdigit()
True

isalnum()是否全由数字、字母、数字和字母组成

>>> s='asdf1234'
>>> s.isalnum()
True
>>> s='1234'
>>> s.isalnum()
True
>>> s='asdf'
>>> s.isalnum()
True
>>> s='asdf&1234'
>>> s.isalnum()
False
>>> s='123*456'
>>> 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 "<pyshell#11>", line 1, in <module>
    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 "<pyshell#11>", line 1, in <module>
    s.isdecimal()
AttributeError: 'bytes' object has no attribute 'isdecimal'

>>> s.isnumeric()
Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值