news 2026/7/15 20:14:20

影刀RPA 字符串操作大全:分割、拼接、查找、替换、格式化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
影刀RPA 字符串操作大全:分割、拼接、查找、替换、格式化

影刀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 大小写转换

text="Hello World"text.upper()# "HELLO WORLD"text.lower()# "hello world"text.title()# "Hello World"(每个单词首字母大写)text.capitalize()# "Hello world"(仅首字母大写)text.swapcase()# "hELLO wORLD"(大小写互换)

1.3 字符串长度

text="Hello World"len(text)# 11# 中文字符![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/5dae2effff1645acb2993a67a0e06d5e.png#pic_center)text_cn="你好世界"len(text_cn)# 4(Python 3中中文字符长度为1)

二、字符串分割

2.1 按分隔符分割

# 按逗号分割text="苹果,香蕉,橘子,葡萄"result=text.split(",")# ["苹果", "香蕉", "橘子", "葡萄"]# 限制分割次数result=text.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="苹果,香蕉;橘子|葡萄"result=re.split(r'[,;|]',text)# ["苹果", "香蕉", "橘子", "葡萄"]

2.2 分割URL参数

url="https://example.com/search?q=手机&page=2&sort=price"# 提取查询参数fromurllib.parseimporturlparse,parse_qs parsed=urlparse(url)params=parse_qs(parsed.query)# {'q': ['手机'], 'page': ['2'], 'sort': ['price']}q=params.get("q",[""])[0]# "手机"page=params.get("page",["1"])[0]# "2"

2.3 partition分割

# partition分成三部分:分隔符前、分隔符、分隔符后text="商品名:蓝牙耳机"before,sep,after=text.partition(":")# before="商品名", sep=":", after="蓝牙耳机"# rpartition从右往左找text="D:\\data\\product.xlsx"dir_path,sep,filename=text.rpartition("\\")# dir_path="D:\\data", sep="\\", filename="product.xlsx"

三、字符串拼接

3.1 基本拼接

# 用+拼接result="Hello"+" "+"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"

坑:用+拼接大量字符串很慢

# 慢:每次+都创建新字符串result=""forwordinwords:result+=word# 每次都复制整个result# 快:用join一次拼接result="".join(words)

3.2 f-string格式化

name="蓝牙耳机"price=99.9count=100# f-string(Python 3.6+,推荐)text=f"商品:{name},价格:{price}元,库存:{count}件"# "商品:蓝牙耳机,价格:99.9元,库存:100件"# 控制小数位数text=f"价格:{price:.2f}元"# "价格:99.90元"# 补零text=f"序号:{5:04d}"# "序号:0005"# 百分比ratio=0.85text=f"完成度:{ratio:.1%}"# "完成度:85.0%"# 千分位分隔big_number=1234567890text=f"总额:{big_number:,}"# "总额:1,234,567,890"

3.3 format方法

# 位置参数text="{}的价格是{}元".format("蓝牙耳机",99.9)# 命名参数text="{name}的价格是{price}元".format(name="蓝牙耳机",price=99.9)# 模板复用template="亲爱的{user},您的订单{order_id}已发货,预计{date}送达。"msg1=template.format(user="张三",order_id="A001",date="7月3日")msg2=template.format(user="李四",order_id="A002",date="7月4日")

四、字符串查找

4.1 查找子串位置

text="Hello World, Hello Python"# find返回第一次出现的位置,找不到返回-1pos=text.find("Hello")# 0pos=text.find("hello")# -1(区分大小写)# rfind从右往左找pos=text.rfind("Hello")# 12# index和find类似,但找不到会报错pos=text.index("World")# 6# 统计出现次数count=text.count("Hello")# 2

4.2 判断包含

text="蓝牙耳机Pro Max"# 判断是否包含"耳机"intext# True"手机"intext# False# 判断开头/结尾text.startswith("蓝牙")# Truetext.endswith("Max")# True# 判断类型"123".isdigit()# True"abc".isalpha()# True"abc123".isalnum()# True" ".isspace()# True

4.3 正则查找

importre text="订单号:ORD20260701001,金额:¥199.9,时间:2026-07-01 14:30"# 查找数字numbers=re.findall(r'\d+',text)# ['20260701001', '199', '9', '2026', '07', '01', '14', '30']# 查找日期dates=re.findall(r'\d{4}-\d{2}-\d{2}',text)# ['2026-07-01']# 查找金额amounts=re.findall(r'¥([\d.]+)',text)# ['199.9']# 查找邮箱emails=re.findall(r'[\w.]+@[\w.]+\.\w+',"联系:test@example.com 或 admin@site.org")# ['test@example.com', 'admin@site.org']

五、字符串替换

5.1 基本替换

text="苹果 香蕉 橘子"# 替换所有匹配result=text.replace("香蕉","葡萄")# "苹果 葡萄 橘子"# 限制替换次数result=text.replace(" ","-",1)# "苹果-香蕉 橘子"(只替换第一个)

5.2 正则替换

importre text="价格:¥199.9,原价:¥299.9"# 替换所有数字为*result=re.sub(r'\d','*',text)# "价格:¥***.*,原价:¥***.*"# 替换并引用匹配内容text="2026-07-01"result=re.sub(r'(\d{4})-(\d{2})-(\d{2})',r'\1年\2月\3日',text)# "2026年07月01日"# 替换多个空白为一个text="Hello World Python"result=re.sub(r'\s+',' ',text)# "Hello World Python"# 使用函数做复杂替换defreplace_price(match):price=float(match.group(1))returnf"¥{price*1.1:.1f}"text="原价:¥100.00"result=re.sub(r'¥([\d.]+)',replace_price,text)# "原价:¥110.0"

5.3 批量替换

text="今天天气真好,适合出去走走。"# 用字典做批量替换replace_map={"今天":"明天","真好":"不错","走走":"跑步",}forold,newinreplace_map.items():text=text.replace(old,new)# 或者用正则一次替换pattern=re.compile('|'.join(re.escape(k)forkinreplace_map))result=pattern.sub(lambdam:replace_map[m.group(0)],text)

六、字符串截取

6.1 切片

text="Hello World"text[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 提取固定格式

# 提取文件扩展名filename="report_20260701.xlsx"ext=filename[filename.rfind(".")+1:]# "xlsx"# 提取URL域名url="https://www.example.com/path/page"domain=url.split("/")[2]# "www.example.com"# 提取括号内的内容text="商品名称(红色款)"importre inner=re.findall(r'((.+?))',text)# ["红色款"]# 提取两个标记之间的内容text="<title>网页标题</title>"result=re.findall(r'<title>(.*?)</title>',text)# ["网页标题"]

6.3 按宽度截断

deftruncate(text,max_width,suffix="..."):"""按显示宽度截断字符串(中文算2宽度)"""width=sum(2iford(c)>127else1forcintext)ifwidth<=max_width:returntext result=""current_width=0forcharintext:char_width=2iford(char)>127else1ifcurrent_width+char_width>max_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店群自动化报活动案例)]breakresult+=char current_width+=char_widthreturnresult+suffix# 使用truncate("这是一段很长的中文文本内容需要截断",15)# "这是一段很长的..."

七、实战场景

7.1 清理采集的网页文本

defclean_web_text(text):"""清理网页采集的文本"""ifnottext:return""importre# 1. 去除HTML标签text=re.sub(r'<[^>]+>','',text)# 2. 替换HTML实体text=text.replace("&nbsp;"," ")text=text.replace("&amp;","&")text=text.replace("&lt;","<")text=text.replace("&gt;",">")text=text.replace("&quot;",'"')# 3. 多个空白合并为一个text=re.sub(r'\s+',' ',text)# 4. 去除首尾空白text=text.strip()returntext# 使用raw_html=" <p>商品名称:&nbsp;&nbsp;蓝牙耳机&nbsp;&nbsp;<br>价格:¥99.9 </p>"clean_text=clean_web_text(raw_html)# "商品名称: 蓝牙耳机 价格:¥99.9"

7.2 提取结构化数据

importre text=""" 姓名:张三 电话:13812345678 邮箱:zhangsan@example.com 地址:北京市朝阳区XX路XX号 身份证:110105199001011234 """# 提取各字段name=re.search(r'姓名[::]\s*(.+)',text).group(1).strip()phone=re.search(r'电话[::]\s*(\d{11})',text).group(1)email=re.search(r'邮箱[::]\s*([\w.]+@[\w.]+)',text).group(1)address=re.search(r'地址[::]\s*(.+)',text).group(1).strip()id_card=re.search(r'身份证[::]\s*(\d{18})',text).group(1)data={"name":name,"phone":phone,"email":email,"address":address,"id_card":id_card}

7.3 生成文件路径

fromdatetimeimportdatetimeimportos# 生成按日期组织的文件路径date=datetime.now()year=date.strftime("%Y")month=date.strftime("%m")day=date.strftime("%d")filename=f"report_{date.strftime('%Y%m%d_%H%M%S')}.xlsx"filepath=os.path.join("D:","output",year,month,day,filename)# D:\output\2026\07\01\report_20260701_143025.xlsx# 确保目录存在os.makedirs(os.path.dirname(filepath),exist_ok=True)

八、避坑清单

坑1:字符串不可变

Python字符串是不可变对象,所有字符串操作都返回新字符串,不修改原字符串:

text="Hello"text.upper()# 返回"HELLO",但text仍然是"Hello"text=text.upper()# 需要重新赋值

坑2:中文编码问题

Python 3字符串默认是Unicode,一般没有编码问题。但读写文件时注意指定编码。网络请求的响应体注意response.encoding

坑3:正则中的特殊字符

正则中.*+?{}[]()\|^$都是特殊字符。匹配这些字符本身需要转义:

# 匹配价格中的¥符号(不需要转义)re.findall(r'¥[\d.]+',text)# 匹配点号.(需要转义)re.findall(r'\d+\.\d+',"价格99.9元")# ["99.9"]

坑4:split空字符串问题

"".split(",")# [""],不是[]"a,,b".split(",")# ["a", "", "b"],空字符串保留# 过滤空字符串[xforxin"a,,b".split(",")ifx]# ["a", "b"]

坑5:format和f-string中的花括号

# f-string中要输出花括号本身,用双花括号text=f"{{这是一个花括号}}"# "{这是一个花括号}"![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/598b8715d7874fa7b9dfde39aad30b07.png#pic_center)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 17:30:01

【Linux】实战:从零编写一个systemd服务实现开机自启

1. 为什么需要systemd服务每次重启服务器后都要手动启动一堆服务&#xff1f;作为一名运维老兵&#xff0c;我见过太多人用nohup、screen这些土办法跑守护进程&#xff0c;结果服务器一重启服务全挂了。其实Linux早就给我们准备好了更专业的解决方案——systemd服务管理。想象一…

作者头像 李华
网站建设 2026/7/14 17:29:55

APAddressBook安装教程:Cocoapods与Carthage两种方式快速集成

APAddressBook安装教程&#xff1a;Cocoapods与Carthage两种方式快速集成 【免费下载链接】APAddressBook Easy access to iOS address book 项目地址: https://gitcode.com/gh_mirrors/ap/APAddressBook APAddressBook是一个iOS通讯录访问框架&#xff0c;能够帮助开发…

作者头像 李华
网站建设 2026/7/14 17:29:06

资源强的国际EMBA怎么选?2026选购避坑指南+主流项目横向对比

一、国际EMBA报考常见踩坑痛点&#xff0c;90%高管都中招过当下越来越多企业创始人、高层管理者选择报考国际EMBA&#xff0c;核心诉求集中在拓宽全球视野、对接高端人脉、系统升级管理能力、获取可认证硕士学位四大方向。但市面上EMBA项目鱼龙混杂&#xff0c;多数职场人报考时…

作者头像 李华
网站建设 2026/7/14 17:24:56

Linux GOT Hook技术解析与实战指南

1. Linux GOT Hook技术解析 GOT&#xff08;Global Offset Table&#xff09;是Linux动态链接过程中的核心数据结构&#xff0c;它记录了外部函数在内存中的实际地址。当程序首次调用共享库函数时&#xff0c;动态链接器会通过GOT完成地址解析和重定位。 GOT Hook技术的本质是…

作者头像 李华