
影刀RPA 字符串操作大全分割、拼接、查找、替换、格式化作者林焱字符串是RPA流程中处理最多的数据类型。采集到的网页文本是字符串、Excel里读出来的数据是字符串、API返回的JSON是字符串、文件路径也是字符串。但很多新手对字符串操作不熟练遇到提取URL中的参数“清理采集文本中的空白”把列表拼接成逗号分隔的字符串这类需求时只会笨办法。这篇文章把Python字符串操作的常用方法和实战场景讲全拿来就能用。一、字符串基础操作1.1 去除空白text Hello World # 去除两端空白text.strip()# Hello World# 只去除左端text.lstrip()# Hello World # 只去除右端text.rstrip()# Hello World# 去除所有空白包括中间的importre re.sub(r\s,,text)# HelloWorld坑strip去掉的不只是空格strip()默认去除空格、制表符\t、换行符\n、回车符\r等所有空白字符。如果只想去除空格用strip( )。1.2 大小写转换textHello Worldtext.upper()# HELLO WORLDtext.lower()# hello worldtext.title()# Hello World每个单词首字母大写text.capitalize()# Hello world仅首字母大写text.swapcase()# hELLO wORLD大小写互换1.3 字符串长度textHello Worldlen(text)# 11# 中文字符text_cn你好世界len(text_cn)# 4Python 3中中文字符长度为1二、字符串分割2.1 按分隔符分割# 按逗号分割text苹果,香蕉,橘子,葡萄resulttext.split(,)# [苹果, 香蕉, 橘子, 葡萄]# 限制分割次数resulttext.split(,,2)# [苹果, 香蕉, 橘子,葡萄]# 按换行符分割[video(video-JtQEOH7p-1784019954325)(type-csdn)(url-https://live.csdn.net/v/embed/525010)(image-https://v-blog.csdnimg.cn/asset/f4faa587144cb7070f19e8b36813806b/cover/Cover0.jpg)(title-店群矩阵自动化突破运营极限)]lines第一行\n第二行\n第三行.split(\n)# [第一行, 第二行, 第三行]# 按多个分隔符分割importre text苹果,香蕉;橘子|葡萄resultre.split(r[,;|],text)# [苹果, 香蕉, 橘子, 葡萄]2.2 分割URL参数urlhttps://example.com/search?q手机page2sortprice# 提取查询参数fromurllib.parseimporturlparse,parse_qs parsedurlparse(url)paramsparse_qs(parsed.query)# {q: [手机], page: [2], sort: [price]}qparams.get(q,[])[0]# 手机pageparams.get(page,[1])[0]# 22.3 partition分割# partition分成三部分分隔符前、分隔符、分隔符后text商品名蓝牙耳机before,sep,aftertext.partition()# before商品名, sep, after蓝牙耳机# rpartition从右往左找textD:\\data\\product.xlsxdir_path,sep,filenametext.rpartition(\\)# dir_pathD:\\data, sep\\, filenameproduct.xlsx三、字符串拼接3.1 基本拼接# 用拼接resultHello World# Hello World# 用join拼接列表推荐words[苹果,香蕉,橘子]result,.join(words)# 苹果,香蕉,橘子result - .join(words)# 苹果 - 香蕉 - 橘子result.join(words)# 苹果香蕉橘子result\n.join(words)# 换行分隔# 用join拼接数字列表需要先转字符串numbers[1,2,3,4,5]result,.join(str(n)forninnumbers)# 1,2,3,4,5坑用拼接大量字符串很慢# 慢每次都创建新字符串resultforwordinwords:resultword# 每次都复制整个result# 快用join一次拼接result.join(words)3.2 f-string格式化name蓝牙耳机price99.9count100# f-stringPython 3.6推荐textf商品{name}价格{price}元库存{count}件# 商品蓝牙耳机价格99.9元库存100件# 控制小数位数textf价格{price:.2f}元# 价格99.90元# 补零textf序号{5:04d}# 序号0005# 百分比ratio0.85textf完成度{ratio:.1%}# 完成度85.0%# 千分位分隔big_number1234567890textf总额{big_number:,}# 总额1,234,567,8903.3 format方法# 位置参数text{}的价格是{}元.format(蓝牙耳机,99.9)# 命名参数text{name}的价格是{price}元.format(name蓝牙耳机,price99.9)# 模板复用template亲爱的{user}您的订单{order_id}已发货预计{date}送达。msg1template.format(user张三,order_idA001,date7月3日)msg2template.format(user李四,order_idA002,date7月4日)四、字符串查找4.1 查找子串位置textHello World, Hello Python# find返回第一次出现的位置找不到返回-1postext.find(Hello)# 0postext.find(hello)# -1区分大小写# rfind从右往左找postext.rfind(Hello)# 12# index和find类似但找不到会报错postext.index(World)# 6# 统计出现次数counttext.count(Hello)# 24.2 判断包含text蓝牙耳机Pro Max# 判断是否包含耳机intext# True手机intext# False# 判断开头/结尾text.startswith(蓝牙)# Truetext.endswith(Max)# True# 判断类型123.isdigit()# Trueabc.isalpha()# Trueabc123.isalnum()# True .isspace()# True4.3 正则查找importre text订单号ORD20260701001金额¥199.9时间2026-07-01 14:30# 查找数字numbersre.findall(r\d,text)# [20260701001, 199, 9, 2026, 07, 01, 14, 30]# 查找日期datesre.findall(r\d{4}-\d{2}-\d{2},text)# [2026-07-01]# 查找金额amountsre.findall(r¥([\d.]),text)# [199.9]# 查找邮箱emailsre.findall(r[\w.][\w.]\.\w,联系testexample.com 或 adminsite.org)# [testexample.com, adminsite.org]五、字符串替换5.1 基本替换text苹果 香蕉 橘子# 替换所有匹配resulttext.replace(香蕉,葡萄)# 苹果 葡萄 橘子# 限制替换次数resulttext.replace( ,-,1)# 苹果-香蕉 橘子只替换第一个5.2 正则替换importre text价格¥199.9原价¥299.9# 替换所有数字为*resultre.sub(r\d,*,text)# 价格¥***.*原价¥***.*# 替换并引用匹配内容text2026-07-01resultre.sub(r(\d{4})-(\d{2})-(\d{2}),r\1年\2月\3日,text)# 2026年07月01日# 替换多个空白为一个textHello World Pythonresultre.sub(r\s, ,text)# Hello World Python# 使用函数做复杂替换defreplace_price(match):pricefloat(match.group(1))returnf¥{price*1.1:.1f}text原价¥100.00resultre.sub(r¥([\d.]),replace_price,text)# 原价¥110.05.3 批量替换text今天天气真好适合出去走走。# 用字典做批量替换replace_map{今天:明天,真好:不错,走走:跑步,}forold,newinreplace_map.items():texttext.replace(old,new)# 或者用正则一次替换patternre.compile(|.join(re.escape(k)forkinreplace_map))resultpattern.sub(lambdam:replace_map[m.group(0)],text)六、字符串截取6.1 切片textHello Worldtext[0:5]# Hello前5个字符text[6:]# World第7个字符到末尾text[:5]# Hello开头到第5个字符text[-5:]# World最后5个字符text[-1]# d最后一个字符text[::2]# HloWrd每隔一个取一个text[::-1]# dlroW olleH反转字符串6.2 提取固定格式# 提取文件扩展名filenamereport_20260701.xlsxextfilename[filename.rfind(.)1:]# xlsx# 提取URL域名urlhttps://www.example.com/path/pagedomainurl.split(/)[2]# www.example.com# 提取括号内的内容text商品名称红色款importre innerre.findall(r(.?),text)# [红色款]# 提取两个标记之间的内容texttitle网页标题/titleresultre.findall(rtitle(.*?)/title,text)# [网页标题]6.3 按宽度截断deftruncate(text,max_width,suffix...):按显示宽度截断字符串中文算2宽度widthsum(2iford(c)127else1forcintext)ifwidthmax_width:returntext resultcurrent_width0forcharintext:char_width2iford(char)127else1ifcurrent_widthchar_widthmax_width-len(suffix):[video(video-SbtbFueU-1784019961038)(type-csdn)(url-https://live.csdn.net/v/embed/524992)(image-https://v-blog.csdnimg.cn/asset/b59aed2f01d4fe8583467562aaf4dcfd/cover/Cover0.jpg)(title-temu店群自动化报活动案例)]breakresultchar current_widthchar_widthreturnresultsuffix# 使用truncate(这是一段很长的中文文本内容需要截断,15)# 这是一段很长的...七、实战场景7.1 清理采集的网页文本defclean_web_text(text):清理网页采集的文本ifnottext:returnimportre# 1. 去除HTML标签textre.sub(r[^],,text)# 2. 替换HTML实体texttext.replace(nbsp;, )texttext.replace(amp;,)texttext.replace(lt;,)texttext.replace(gt;,)texttext.replace(quot;,)# 3. 多个空白合并为一个textre.sub(r\s, ,text)# 4. 去除首尾空白texttext.strip()returntext# 使用raw_html p商品名称nbsp;nbsp;蓝牙耳机nbsp;nbsp;br价格¥99.9 /pclean_textclean_web_text(raw_html)# 商品名称 蓝牙耳机 价格¥99.97.2 提取结构化数据importre text 姓名张三 电话13812345678 邮箱zhangsanexample.com 地址北京市朝阳区XX路XX号 身份证110105199001011234 # 提取各字段namere.search(r姓名[:]\s*(.),text).group(1).strip()phonere.search(r电话[:]\s*(\d{11}),text).group(1)emailre.search(r邮箱[:]\s*([\w.][\w.]),text).group(1)addressre.search(r地址[:]\s*(.),text).group(1).strip()id_cardre.search(r身份证[:]\s*(\d{18}),text).group(1)data{name:name,phone:phone,email:email,address:address,id_card:id_card}7.3 生成文件路径fromdatetimeimportdatetimeimportos# 生成按日期组织的文件路径datedatetime.now()yeardate.strftime(%Y)monthdate.strftime(%m)daydate.strftime(%d)filenamefreport_{date.strftime(%Y%m%d_%H%M%S)}.xlsxfilepathos.path.join(D:,output,year,month,day,filename)# D:\output\2026\07\01\report_20260701_143025.xlsx# 确保目录存在os.makedirs(os.path.dirname(filepath),exist_okTrue)八、避坑清单坑1字符串不可变Python字符串是不可变对象所有字符串操作都返回新字符串不修改原字符串textHellotext.upper()# 返回HELLO但text仍然是Hellotexttext.upper()# 需要重新赋值坑2中文编码问题Python 3字符串默认是Unicode一般没有编码问题。但读写文件时注意指定编码。网络请求的响应体注意response.encoding。坑3正则中的特殊字符正则中.*?{}[]()\|^$都是特殊字符。匹配这些字符本身需要转义# 匹配价格中的¥符号不需要转义re.findall(r¥[\d.],text)# 匹配点号.需要转义re.findall(r\d\.\d,价格99.9元)# [99.9]坑4split空字符串问题.split(,)# []不是[]a,,b.split(,)# [a, , b]空字符串保留# 过滤空字符串[xforxina,,b.split(,)ifx]# [a, b]坑5format和f-string中的花括号# f-string中要输出花括号本身用双花括号textf{{这是一个花括号}}# {这是一个花括号}