从网页采集到的文本是“商品ID:SPU-123456 | 价格:99元”,要分别取出ID和价格。
问题:影刀自带的“字符串处理”指令有十几种,不知道用哪个。
答案:四种核心提取方法——按位置截取、按分隔符拆分、正则匹配、JSON解析。
按场景选,覆盖90%的文本提取需求。
一、四种方法对比
| 方法 | 适用场景 | 示例 | 优点 | 缺点 |
|---|---|---|---|---|
| 截取字符串 | 固定长度、固定位置 | 取手机号前3位 | 简单 | 不灵活 |
| split拆分 | 有固定分隔符(逗号、竖线、空格) | a,b,c → 拆成列表 | 直观 | 分隔符变化则失效 |
| 正则提取 | 有模式规律(数字、邮箱、价格) | 提取文本中所有数字 | 强大灵活 | 需要学正则语法 |
| JSON解析 | 数据是JSON格式 | API返回的数据 | 结构化 | 需懂JSON |
选择顺序:
先用split拆分(最快)→ 不行用正则 → 固定长度用截取 → 有JSON用解析。
二、方法一:截取字符串——固定位置提取
场景:订单号固定是“ORD”+8位数字,如“ORD12345678”,要取出数字部分。
或者日期“2024-01-15”要取出年份前4位。
影刀指令:截取字符串(在“字符串处理”分类下)
操作步骤:
- 拖入“截取字符串”指令。
- 原文本:
{order_no}(如“ORD12345678”) - 开始位置:3(从第0个字符开始数,'O'是0,'R'是1,'D'是2,所以数字从3开始)
- 截取长度:8
5. 输出到:
{order_num}
# 示例配置
# 原文本:{order_no} = "ORD12345678"

# 开始位置:3
# 截取长度:8
# 输出:{order_num} = "12345678"
# 常见开始位置:0=第一个字符,负数表示从后往前(部分版本支持)
容易踩的坑:开始位置从0开始数,不是1。
测试方法:先用“输出日志”打印原文本长度,确保截取范围不越界。
三、方法二:split拆分——有分隔符时首选
场景:商品规格“颜色:红色|尺寸:L|材质:棉”,要提取“红色”。
或者CSV数据“手机壳,29.9,1000件”。
影刀指令:拆分文本(输出列表)或字符串拆分(不同版本名称略有差异)
操作步骤:
- 拖入“拆分文本”指令。
- 原文本:
{spec}= “颜色:红色|尺寸:L|材质:棉” - 分隔符:
|(竖线) - 输出到列表:
{parts}
# 拆分后 {parts} = ["颜色:红色", "尺寸:L", "材质:棉"]
# 再取第一个元素“颜色:红色”,继续拆分:

# 再次拆分文本,原文本取 {parts[0]},分隔符 “:”
# 输出列表 {color_parts},取 {color_parts[1]} 得到 “红色”
影刀里取列表元素:
用“获取列表指定位置的元素”指令,位置0开始。
常用分隔符:逗号,、竖线|、分号;、空格 、换行符\n(在影刀里直接写\n)
四、方法三:正则提取——最强大的万能方法
场景:
- 从“商品价格:¥99.00,活动价¥89.00”提取两个价格数字
- 从一段文字里提取所有手机号
- 提取HTML标签里的数字ID
影刀指令:正则提取 或 用“Python代码”写正则(推荐后者,更灵活)
方法A:使用影刀自带的“正则提取”指令
- 拖入“正则提取”指令。
- 原文本:
{text} - 正则表达式:
\d+\.?\d*(匹配数字和小数点) - 匹配模式:第一个匹配(或所有匹配)
- 输出到变量。
方法B:用Python代码(更强大,推荐)
import re
text = get_var("product_info") # "价格:¥99.00,库存:200件"
# 提取价格数字
price_match = re.search(r'¥(\d+\.?\d*)', text)
if price_match:
price = float(price_match.group(1))
else:
price = 0
# 提取库存数字(纯数字)
stock_match = re.search(r'库存:(\d+)', text)
if stock_match:
stock = int(stock_match.group(1))
else:
stock = 0
set_var("price_num", price)
set_var("stock_num", stock)
常用正则模式速查:
| 目标 | 正则表达式 | 说明 |
|---|---|---|
| 整数 | \d+ | 一个或多个数字 |
| 小数 | \d+\.?\d* | 整数或小数 |
| 手机号 | 1[3-9]\d{9} | 11位手机号 |
| 邮箱 | [\w\.-]+@[\w\.-]+\.\w+ | 简单邮箱匹配 |
| 价格符号+数字 | ¥(\d+\.?\d*) | 括号表示提取数字 |
| 中文 | [\u4e00-\u9fa5]+ | 匹配中文字符 |
在线测试正则:regex101.com(选Python风格)
五、方法四:JSON解析——处理API返回数据
场景:调用接口返回JSON字符串:
{"code":0,"data":{"name":"手机壳","price":29.9}},要取出name和price。
影刀指令:解析JSON(在“字符串处理”或“扩展功能”中)
操作步骤:
- 拖入“解析JSON”指令。
- JSON字符串:
{json_str} - 输出到变量:
{json_obj}(字典类型) - 用“获取字典的值”指令取数据:
{json_obj['data']['name']}
# 如果影刀JSON解析指令不好用,用Python代码
import json
json_str = get_var("api_response")
data = json.loads(json_str)
name = data['data']['name']
price = data['data']['price']
set_var("product_name", name)
set_var("product_price", price)
注意:JSON键名区分大小写,"name"和"Name"不同。
六、实战组合:清洗一段商品详情文本
原始文本:
商品:iPhone15 黑色 128GB | 价格:¥5999.00 | 月销:1.2万件 | 店铺:XX数码
目标:提取商品名、价格数字、月销数字。
方法:split拆分 + 正则提取
# 影刀指令流程
# 1. 拆分文本:分隔符 "|",输出列表 {parts}
# {parts[0]} = "商品:iPhone15 黑色 128GB"
# {parts[1]} = "价格:¥5999.00"
# {parts[2]} = "月销:1.2万件"
# {parts[3]} = "店铺:XX数码"
# 2. 取商品名:拆分 {parts[0]},分隔符 ":",取第二部分
# 3. 取价格数字:用正则提取 ¥(\d+\.?\d*)
# 或者拆分 {parts[1]},分隔符 "¥",取第二部分
# 4. 取月销数字:拆分 {parts[2]},分隔符 ":", 取第二部分得到 "1.2万件"
# 再用Python正则转数字(参考之前文章销量清洗)
七、影刀专属操作清单
| 操作 | 精确指令 | 位置 |
|---|---|---|
| 截取字符串 | 截取字符串 | 字符串处理 |
| 拆分文本 | 拆分文本 | 字符串处理 |
| 正则提取 | 正则提取 | 字符串处理(部分版本有) |
| 解析JSON | 解析JSON | 扩展功能 |
| 获取列表元素 | 获取列表指定位置的元素 | 列表操作 |
| 获取字典值 | 获取字典的值 | 字典操作 |
| Python代码 | Python代码 | 扩展功能(推荐) |
版本差异:社区版“正则提取”指令功能较弱(不支持分组捕获),建议直接用Python代码写正则。
创业版以上支持更完整的正则功能。
常见问题速查
| 问题 | 原因 | 解决方法 |
|---|---|---|
| split拆分后列表为空 | 分隔符写错(中英文符号) | 原文本中是中文冒号还是英文冒号? |
| 截取字符串乱码 | 开始位置算错 | 用“输出日志”打印原文本,逐字符数 |
| 正则匹配不到 | 正则表达式写错 | 先在regex101测试 |
| JSON解析报错 | 字符串不是合法JSON | 用Python的json.loads捕获异常 |
| 提取数字时小数点丢失 | 正则没写小数点 | \d+(\.\d+)? |
推荐资源
- 在线正则练习:regex101.com(选择Python)
- 影刀学院课程:《字符串处理——提取数据的4种武器》(约15分钟)
- Python字符串方法速查:
str.strip()、str.split()、str.replace()
最后一句:文本提取的核心是“找到规律”。
有固定分隔符就用split,有数字/邮箱规律就用正则,固定位置用截取。
正则值得花一小时专门学,学会后效率翻倍。
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
