影刀RPA文本数据提取方法一:正则表达式提取
影刀RPA文本数据提取方法一:正则表达式提取
作者:林焱 | 适合人群:需要从杂乱文本中精确提取结构化数据的新手
什么情况用什么
你从网页上抓下来一段文本,长这样:
商品名称:iPhone 15 Pro 价格:¥8999 销量:1.2万 发布时间:2025-10-01 联系方式:13800138000 邮箱:support@apple.com你要的只是价格里的数字和联系方式,其他都是干扰信息。
用「获取元素信息」指令拿到的是整个文本,下一步怎么把你要的数据抠出来?
正则表达式(Regular Expression,简称正则)就是干这个的——用一种特殊的字符串模式,从文本里匹配并提取你想要的内容。
什么情况用正则提取:
- 目标数据有固定的格式(比如手机号11位、邮箱包含@)
- 数据混在一大段文本里,用XPath单独提取不到
- 你需要做数据清洗(比如把"¥8999"变成"8999")
怎么做
第一步:理解正则的基本语法
不用背,用的时候查就行。常用符号:
| 符号 | 含义 | 例子 |
|---|---|---|
\d | 匹配数字 | \d+匹配连续的数字 |
\w | 匹配字母、数字、下划线 | \w+匹配一个单词 |
. | 匹配任意字符(除了换行) | a.c匹配"abc"、“a1c” |
* | 重复0次或多次 | a*匹配""、“a”、“aa”… |
+ | 重复1次或多次 | a+匹配"a"、“aa”… |
? | 重复0次或1次 | a?匹配"“或"a” |
[] | 匹配括号里的任意一个字符 | [0-9]等价于\d |
() | 分组,提取括号里的内容 | (\d+)只提取数字部分 |
第二步:在影刀里使用正则提取
影刀RPA里有两个指令可以用正则:
- 「正则表达式匹配」— 判断文本是否匹配某个模式
- 「正则表达式提取」— 从文本里提取符合模式的内容
拼多多店群自动化上架方案
案例1:从价格文本里提取数字
文本:"价格:¥8999元(含运费)"
目标:提取8999
操作步骤:
- 拖入「正则表达式提取」指令
- 源字符串:选包含价格文本的变量
- 正则表达式:
¥(\d+)元 - 提取结果:保存到变量
price_num
解释正则:¥(\d+)元
¥— 匹配人民币符号(\d+)— 分组1:匹配1个或多个数字(这就是你要提取的内容)元— 匹配"元"字
案例2:提取手机号
文本:"请联系13800138000或13900139000咨询"
目标:提取所有手机号
正则:1[3-9]\d{9}
解释:
1— 手机号以1开头[3-9]— 第二位是3-9\d{9}— 后面跟9位数字- 合起来就是11位手机号
在影刀里,用「正则表达式提取(全部匹配)」指令,会返回一个列表:["13800138000","13900139000"]
案例3:提取邮箱地址
文本:"客服邮箱support@apple.com,投诉邮箱complain@apple.com"
正则:[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
这个正则可以匹配大多数邮箱地址格式。
第三步:处理提取结果
正则提取的结果通常是一个列表(因为可能匹配到多个)。
如果只要第一个匹配结果:
提取结果变量[0] ← 取列表第一个元素如果要遍历所有匹配结果:
用「ForEach」指令循环提取结果变量,逐个处理有什么坑
坑1:正则写对了但提取不到,可能是转义问题
在影刀的变量里写正则,\d、\w这些符号需要写成\\d、\\w(加一个反斜杠)。
因为影刀的变量是字符串类型,字符串里的\是转义字符,要表示真正的\需要写\\。
正确写法:"\\d+"(变量里),而不是"\d+"
坑2:.不匹配换行符
默认情况下,正则里的.不匹配换行符。如果你的文本有多行,用.*可能匹配不到跨行的内容。
解决方案:在影刀的正则提取指令里,勾选「多行模式」或「单行模式」(让.匹配换行符)。
坑3:贪婪匹配导致提取多余内容
TEMU店群如何管理运营?
正则默认是"贪婪匹配"——尽量多地匹配。
比如文本:"<div>内容A</div><div>内容B</div>"
正则:<div>.*</div>
贪婪匹配结果:<div>内容A</div><div>内容B</div>(整个都匹配了)
如果你只想匹配第一个<div>,用非贪婪匹配:<div>.*?</div>
在影刀里,在*后面加?就是非贪婪匹配。
坑4:中文标点符号导致匹配失败
网页上的文本,有些标点符号是中文的(比如,、。、:),但你的正则里写的是英文标点(,、.、:)。
解决方案:正则需要同时覆盖中英文标点,或者用\p{Punctuation}(如果影刀支持的话,通常不支持)。更简单的方法:先把文本里的标点统一替换成英文,再做正则提取。
坑5:正则很强大,但也很慢
如果你要对上万条数据做正则提取,速度会比普通的字符串操作(比如contains())慢很多。
解决方案:如果数据量很大,先用简单的字符串操作做第一轮筛选,再用正则做精细提取。
总结
正则提取的核心:用模式匹配代替固定文本查找。
最常用的三个正则:
\d+— 提取数字1[3-9]\d{9}— 提取手机号[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}— 提取邮箱
下一篇讲文本数据提取方法二:JSON解析提取,应对那些数据藏在JSON里的场景(比如Ajax接口返回的数据)。
作者:林焱