Python 字符串处理完全指南常用操作与技巧字符串是 Python 里最常用的数据类型之一。学字符串处理才发现Python 自带的字符串方法强大得离谱大部分场景根本不需要正则表达式。这篇文章把我常用的字符串操作全部分享出来。字符串基础# 定义字符串s1hellos2worlds3多行 字符串# 转义字符s4你好\n世界# 换行s5路径C:\\Users\\Name# 反斜杠# 原始字符串s6rC:\Users\Name# 不转义常用操作拼接和重复# 拼接s1Hello Worldprint(s1)# Hello World# 重复s2ha*3print(s2)# hahaha# join 连接words[Python,is,awesome]s3 .join(words)print(s3)# Python is awesome切片sHello, World!print(s[0])# Hprint(s[-1])# !print(s[0:5])# Helloprint(s[7:12])# Worldprint(s[::-1])# !dlroW ,olleH反转大小写转换sHello, World!print(s.upper())# HELLO, WORLD!print(s.lower())# hello, world!print(s.capitalize())# Hello, world!print(s.title())# Hello, World!print(s.swapcase())# hELLO, wORLD!查找和替换sHello, World!# 查找print(s.find(World))# 7首次出现的位置-1表示未找到print(s.find(Python))# -1print(s.index(World))# 7类似find但未找到会报错print(s.count(l))# 3出现次数# 替换print(s.replace(World,Python))# Hello, Python!print(s.replace(o,O,1))# HellO, World!只替换1次判断相关sHello123# 判断开头/结尾print(s.startswith(Hello))# Trueprint(s.endswith(123))# True# 判断类型print(s.isdigit())# False有字母print(s.isalpha())# False有数字print(s.isalnum())# True全是字母或数字print(s.isupper())# Falseprint(s.islower())# Falseprint(s.isspace())# Falseprint(s.istitle())# False# 判断是否包含print(Helloins)# Trueprint(Pythonins)# False去除空白s Hello, World! print(s.strip())# 去除两边空白print(s.lstrip())# 去除左边空白print(s.rstrip())# 去除右边空白# 去除指定字符s2!!!Hello!!!print(s2.strip(!))# Helloprint(s2.strip(!))# Hello分割和连接sapple,banana,orange# 分割print(s.split(,))# [apple, banana, orange]print(s.split(,,1))# [apple, banana,orange]只分割1次# 按行分割text第一行\n第二行\n第三行print(text.splitlines())# [第一行, 第二行, 第三行]# 连接words[Python,is,awesome]print( .join(words))# Python is awesomeprint(-.join(words))# Python-is-awesome格式化f-string推荐name张三age25score95.5print(f姓名:{name}, 年龄:{age})print(f成绩:{score:.1f})# 保留1位小数print(f{age}年后是{2026age}年)# 2031年后是2051年format()print({} {} {}.format(1,2,3))# 1 2 3print({1} {0} {2}.format(1,2,3))# 2 1 3print({name}的成绩是{score:.1f}.format(name张三,score95.5))% 格式化name张三score95.5print(%s的成绩是%.1f%(name,score))# 张三的成绩是95.5实战案例案例1敏感信息脱敏defmask_info(text):手机号、身份证脱敏importre# 手机号脱敏textre.sub(r(\d{3})\d{4}(\d{4}),r\1****\2,text)# 身份证脱敏textre.sub(r(\d{6})\d{8}(\d{4}),r\1********\2,text)returntext phone我的手机号是13812345678id_card身份证号是110101199001011234print(mask_info(phone))# 我的手机号是138****5678print(mask_info(id_card))# 身份证号是110101********1234案例2歌词解析lyrics [00:00.00]作曲 : 某人 [00:01.00]作词 : 某人 [00:02.50]这是一段歌词 [00:05.30]每行有时间戳 forlineinlyrics.strip().split(\n):ifnotline.strip():continue# 提取时间戳和歌词importrematchre.match(r\[(\d{2}):(\d{2})\.\d{2}\](.),line)ifmatch:minutes,seconds,lyricmatch.groups()print(f{minutes}:{seconds}{lyric})案例3日志解析log 2026-04-11 10:30:15 INFO 用户登录成功 2026-04-11 10:30:20 ERROR 数据库连接超时 2026-04-11 10:30:25 WARNING 内存使用率 85% importreforlineinlog.strip().split(\n):matchre.match(r(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (\w) (.),line)ifmatch:time,level,msgmatch.groups()print(f[{level}]{msg})我踩过的坑坑1字符串是不可变的shello# s[0] H # 报错字符串不能这样修改# 正确做法sHs[1:]print(s)# Hello坑2中文字符编码# Python 3 默认 str 是 Unicode不需要特别处理s你好世界print(len(s))# 6字符数print(len(s.encode(utf-8)))# 18字节数# 文件读写时指定编码withopen(file.txt,r,encodingutf-8)asf:contentf.read()坑3strip() 默认去除所有空白字符s hello \n\t print(repr(s.strip()))# hello换行和tab都被去掉了print(repr(s))# hello \n\t 原字符串不变写在最后字符串方法虽然多但大部分场景常用的就那么十几个。我的经验是能用 f-string split/join/strip/replace 解决的问题就不要上正则。有帮助的话点个赞有问题评论区见