影刀RPA文本数据提取方法一:正则表达式提取

影刀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. 「正则表达式匹配」— 判断文本是否匹配某个模式
  2. 「正则表达式提取」— 从文本里提取符合模式的内容

拼多多店群自动化上架方案

案例1:从价格文本里提取数字

文本:"价格:¥8999元(含运费)"

目标:提取8999

操作步骤:

  1. 拖入「正则表达式提取」指令
  2. 源字符串:选包含价格文本的变量
  3. 正则表达式:¥(\d+)元
  4. 提取结果:保存到变量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())慢很多。

解决方案:如果数据量很大,先用简单的字符串操作做第一轮筛选,再用正则做精细提取。

总结

正则提取的核心:用模式匹配代替固定文本查找

最常用的三个正则:

  1. \d+— 提取数字
  2. 1[3-9]\d{9}— 提取手机号
  3. [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}— 提取邮箱

下一篇讲文本数据提取方法二:JSON解析提取,应对那些数据藏在JSON里的场景(比如Ajax接口返回的数据)。


作者:林焱