影刀RPA进阶教程:正则表达式10个必会模式——让文本提取精准无误
影刀RPA正则表达式是文本处理的瑞士军刀。网页抓到的数据里混着空格、换行、标签,用内置方法怎么拆都拆不干净——一行正则就搞定。这篇文章给你10个影刀实战中最常用的正则模式,直接复制用。
作者:林焱 | 影刀RPA进阶系列
为什么需要正则
影刀内置的文本处理指令(分割、替换、截取)足够简单场景用,但碰到这些情况就吃力了:
- 从"价格:¥129.00(含税)"里只取数字 129.00
- 从 HTML 标签里提取纯文本
- 验证手机号/邮箱格式
- 批量替换多种字符(同时去空格、去逗号、去换行)
正则一行代码解决以上全部问题。
影刀里怎么用正则
两种方式:
方式一:用 Python 执行代码(推荐,功能最全)
importre text="价格:¥129.00"result=re.search(r'(\d+\.\d{2})',text)ifresult:price=result.group(1)# "129.00"方式二:用影刀内置的「文本匹配」指令
传入正则表达式和文本,输出匹配结果。简单场景够用,复杂场景推荐 Python。
拼多多店群自动化上架方案
模式1:提取价格(最常见)
importre text="原价:¥258.90,促销价:¥199.00"prices=re.findall(r'(\d+\.\d{2})',text)# 输出:['258.90', '199.00']# 如果价格格式不统一(有"12.9"或"129")prices=re.findall(r'(\d+\.?\d{0,2})',text)模式2:提取中文内容
text="商品名称:Apple iPhone 15 256GB 黑色"# 只提取中文部分chinese=re.findall(r'[\u4e00-\u9fff]+',text)# 输出:['商品名称', '黑色']模式3:验证手机号
phone="13812345678"pattern=r'^1[3-9]\d{9}$'ifre.match(pattern,phone):print("手机号格式正确")else:print("手机号格式错误")模式4:验证邮箱
email="test@example.cn"pattern=r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'ifre.match(pattern,email):print("邮箱格式正确")模式5:提取 URL
text="详情页:https://item.xx.com/12345.html 来源:淘宝"urls=re.findall(r'https?://[^\s]+',text)# 输出:['https://item.xx.com/12345.html']模式6:从 HTML 标签里提取纯文本
importre html='<div class="title">iPhone 15 Pro Max</div>'# 去掉所有 HTML 标签clean=re.sub(r'<[^>]+>','',html)# 输出:iPhone 15 Pro Max模式7:按多个分隔符拆分文本
text="商品A|商品B,商品C;商品D、商品E"# 按 | , ; 、 拆分items=re.split(r'[|,;、]',text)# 输出:['商品A', '商品B', '商品C', '商品D', '商品E']模式8:提取日期
text="订单日期:2026-06-11,发货日期:20260612"# 匹配 YYYY-MM-DD 格式dates=re.findall(r'\d{4}-\d{2}-\d{2}',text)# 输出:['2026-06-11']# 同时匹配多种日期格式dates=re.findall(r'\d{4}[-/]\d{2}[-/]\d{2}',text)# 匹配 2026-06-11 和 2026/06/11模式9:清理空白字符
text=" 商品名称\n\t iPhone 15 \n"# 清理开头结尾空白clean=text.strip()# 清理所有类型空白(空格、换行、制表符)clean=re.sub(r'\s+',' ',text).strip()# 输出:商品名称 iPhone 15模式10:提取特定格式的ID
text="订单号:DD2026061100523,退款单号:TK2026061100892"# 提取"DD开头+数字"的订单号order_ids=re.findall(r'DD\d{13}',text)# 输出:['DD2026061100523']# 通用写法:提取所有大写字母+数字的IDall_ids=re.findall(r'[A-Z]{2}\d{13}',text)# 输出:['DD2026061100523', 'TK2026061100892']正则速查表(贴墙上那种)
TEMU店群如何管理运营?
| 符号 | 含义 | 示例 |
|---|---|---|
. | 匹配任意字符(换行除外) | a.c匹配"abc"、“a1c” |
\d | 数字(0-9) | \d{3}匹配3位数字 |
\w | 字母数字下划线 | \w+匹配单词 |
\s | 空白字符 | \s+匹配连续空白 |
* | 0次或多次 | a*匹配""、“a”、“aa” |
+ | 1次或多次 | a+匹配"a"、“aa” |
? | 0次或1次 | colou?r匹配"color"和"colour" |
{n} | 恰好n次 | \d{4}匹配4位数字 |
{n,m} | n到m次 | \d{2,4}匹配2-4位数字 |
[] | 字符集 | [aeiou]匹配任意元音 |
[^] | 排除字符集 | [^0-9]匹配非数字 |
() | 捕获组 | (\d+)\.(\d+)分两部分捕获 |
^ | 开头 | ^商品匹配以"商品"开头 |
$ | 结尾 | 元$匹配以"元"结尾 |
\u4e00-\u9fff | 中文字符 | 匹配所有汉字 |
3个易错提醒
1. 贪婪匹配 vs 非贪婪匹配
text="<div>A</div><div>B</div>"# 贪婪(默认):匹配尽可能多re.findall(r'<div>.*</div>',text)# 结果:['<div>A</div><div>B</div>'] ← 把两个div都包进去了# 非贪婪:匹配尽可能少re.findall(r'<div>.*?</div>',text)# 结果:['<div>A</div>', '<div>B</div>'] ← 正确!加个?就变成非贪婪模式。
2. 别忘了转义特殊字符
需要匹配字面上的.或(时,必须加反斜杠:\.、\(、\$。
# 错误:. 匹配了任意字符re.findall(r'129.00',"129x00")# 也会匹配# 正确:\. 只匹配句点re.findall(r'129\.00',"129.00")# 严格匹配3. 在影刀的「文本匹配」里用正则,换行符不会自动匹配
影刀内置的文本匹配默认是单行模式,.*不匹配换行。如果用 Pythonre.search(),加re.DOTALL标志:
re.search(r'商品名:(.*)价格',text,re.DOTALL)小结
这10个模式覆盖了影刀日常 90% 的文本处理需求。建议收藏这张速查表,碰到文本提取问题先看有没有现成的模式能用,比从头写快得多。
正则不用背,需要时复制改参数就行。
内容标签:影刀RPA / 正则表达式 / 文本处理 / Python re / 数据清洗
作者:林焱
本文是「影刀RPA从零到实战」系列文章之一,持续更新实操技巧与避坑经验。