
Python 字符串处理文本的这几十种方法其实常用的就那些写 Python 代码字符串操作避不开。解析日志、处理用户输入、拼 SQL、格式化输出——天天都在跟文本打交道。Python 的字符串方法多但常用的就那么十几个。字符串是什么记住两点就够了不可变shello# s[0] H # 报错不能直接改# 想改创建新字符串sHs[1:]# Hello字符串一旦创建就不能改所有修改操作都是创建新字符串。记住这点写代码的时候就不会困惑了。序列可以索引和切片sPythons[0]# P从0开始s[-1]# n倒数第一个s[1:4]# yth从索引1到3左闭右开s[::-1]# nohtyP反转切片是字符串最常用的操作之一记住[start:stop:step]左闭右开就行。查和找在一段文本里找东西判断开头结尾urlhttps://example.comurl.startswith(https)# Trueurl.endswith(.com)# True找子串的位置texthello world, hello pythontext.find(world)# 6返回第一次出现的位置text.find(java)# -1找不到返回-1text.rfind(hello)# 13从右边找# 如果确定存在用 index找不到会报错text.index(world)# 6日常用find就够了返回 -1 表示没有。index会抛异常除非你很确定那个子串一定存在。统计出现次数text.count(hello)# 2text.count(o)# 4检查是否包含某个子串ifworldintext:print(找到了)ifjavanotintext:print(没有)in和not in比find() ! -1更直观推荐用这个。改替换、大小写、去空格替换texthello world, hello pythontext.replace(hello,hi)# hi world, hi pythontext.replace(hello,hi,1)# hi world, hello python只替换第一个大小写转换sHello Worlds.upper()# HELLO WORLDs.lower()# hello worlds.capitalize()# Hello world首字母大写其余小写s.title()# Hello World每个单词首字母大写去空格和换行s \t hello \n s.strip()# hello去掉两端空白s.lstrip()# hello \n 去掉左边s.rstrip()# \t hello去掉右边# 去掉指定字符***hello***.strip(*)# hello处理用户输入的时候strip()几乎是必用的——去掉用户不小心敲的空格。拆和拼字符串 ↔ 列表拆字符串变列表sapple,banana,oranges.split(,)# [apple, banana, orange]# 默认按任意空白拆分多个空格也OKhello world.split()# [hello, world]# 控制拆分次数a,b,c,d.split(,,2)# [a, b, c,d]# 按换行拆a\nb\nc.splitlines()# [a, b, c]拼列表变字符串fruits[apple,banana,orange],.join(fruits)# apple,banana,orange .join(fruits)# apple banana orange拼大量字符串的时候千万别用# 错误 慢每次拼接都创建新字符串resultforiinrange(10000):resultstr(i)# 优化 快用列表收集最后 joinparts[]foriinrange(10000):parts.append(str(i))result.join(parts)join比快 10 到 50 倍数据量大的时候差距更明显。格式化把变量放进字符串三种方式我建议直接用第三种。方式1% 格式化老式不推荐姓名%s年龄%d%(张三,25)方式2format()还行但不够简洁姓名{}年龄{}.format(张三,25)方式3f-stringPython 3.6推荐name张三age25f姓名{name}年龄{age}# 最直观最快# 还可以放表达式f明年年龄{age1}# 数字格式化f价格{price:.2f}# 保留两位小数f百分比{rate:.1%}# 转成百分比# 对齐f{左:10}# 左对齐f{右:10}# 右对齐f{中:^10}# 居中f-string 比前两种都快而且代码最干净。能用 f-string 就别用前面两种了。判断检查字符串是什么类型123.isdigit()# True全是数字abc.isalpha()# True全是字母abc123.isalnum()# True全是字母或数字 .isspace()# True全是空白Hello.islower()# FalseHELLO.isupper()# True这些方法在校验用户输入的时候很好用phoneinput(请输入手机号)ifnotphone.isdigit():print(手机号只能包含数字)正则表达式复杂匹配的终极武器字符串方法只能做简单匹配遇到复杂需求就得用正则了。提取手机号importre text我的电话是 13812345678matchre.search(r1[3-9]\d{9},text)ifmatch:print(match.group())# 13812345678提取所有邮箱text联系我testexample.com 或 admintest.comemailsre.findall(r\w\w\.\w,text)# [testexample.com, admintest.com]替换敏感信息re.sub(r1[3-9]\d{9},***,text)常用正则写法速查需求正则手机号1[3-9]\d{9}邮箱\w\w\.\w数字\d中文[\u4e00-\u9fa5]URLhttps?://[^\s]匹配中文的时候\w在 Python 里默认只匹配 ASCII要匹配中文得用[\u4e00-\u9fa5]。