影刀RPA进阶教程:Python正则表达式实战案例——电商数据清洗的10个现成模板
做电商自动化,采集回来的原始数据基本都需要清洗。
价格带着"¥"、销量后面跟着"万件"、手机号藏在一段文字里……
正则表达式是处理这类问题最高效的工具。
不需要精通正则,只需要记住几个常用模式,能改、能用就够了。
一、先在影刀里用 Python 代码指令调用正则
影刀有一个"Python代码"指令,可以直接写 Python。
把正则处理逻辑放在这个指令里:
importre# input_text 是从上一步传进来的字符串(在影刀里配置输入变量)原始文本=input_text# 处理逻辑(见下面各个模板)result=...# 处理结果赋给 result,传回影刀二、10个现成正则模板
模板1:提取价格(去掉货币符号和逗号)
原始文本:¥1,234.56或1234.56元或USD 99.99
importredefextract_price(text):"""提取价格数字,返回 float"""# 匹配可能带逗号分隔的数字match=re.search(r'[\d,]+\.?\d*',str(text))ifmatch:price_str=match.group().replace(',','')returnfloat(price_str)return0.0# 示例print(extract_price("¥1,234.56"))# → 1234.56print(extract_price("99.9元"))# → 99.9print(extract_price("USD 99.99"))# → 99.99result=extract_price(input_text)拼多多店群自动化上架方案
模板2:提取销量(处理"万"单位)
原始文本:1.2万件或12345件或1.5万+件
defextract_sales(text):"""提取销量,统一换算为整数"""text=str(text).strip()# 匹配带万的情况wan_match=re.search(r'([\d.]+)\s*万',text)ifwan_match:returnint(float(wan_match.group(1))*10000)# 匹配纯数字num_match=re.search(r'[\d,]+',text)ifnum_match:returnint(num_match.group().replace(',',''))return0result=extract_sales(input_text)模板3:提取手机号
原始文本:联系人:张三,电话:138 1234 5678,微信同号
defextract_phone(text):"""提取中国大陆手机号"""pattern=r'1[3-9]\d{9}'phones=re.findall(pattern,re.sub(r'\s','',str(text)))# 先去掉空格returnphones[0]ifphoneselse""result=extract_phone(input_text)模板4:提取电子邮箱
defextract_email(text):pattern=r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'emails=re.findall(pattern,str(text))returnemails[0]ifemailselse""result=extract_email(input_text)模板5:提取日期(多种格式)
原始文本:2026-06-10或2026/6/10或2026年6月10日
defextract_date(text):"""提取日期,返回 YYYY-MM-DD 格式"""patterns=[(r'(\d{4})[/-](\d{1,2})[/-](\d{1,2})','{}-{:02d}-{:02d}'),(r'(\d{4})年(\d{1,2})月(\d{1,2})日','{}-{:02d}-{:02d}'),]forpattern,fmtinpatterns:m=re.search(pattern,str(text))ifm:y,mo,d=int(m.group(1)),int(m.group(2)),int(m.group(3))returnfmt.format(y,mo,d)return""result=extract_date(input_text)模板6:提取括号内的内容
原始文本:商品编号(SPU-20260610-001)已上架
defextract_bracket(text,bracket_type='()'):"""提取括号或其他符号中的内容"""ifbracket_type=='()':pattern=r'[((]([^))]+)[))]'elifbracket_type=='[]':pattern=r'[\[【]([^\]】]+)[\]】]'else:pattern=r'[<>]([^<>]+)[<>]'matches=re.findall(pattern,str(text))returnmatches[0]ifmatcheselse""result=extract_bracket(input_text)模板7:提取链接(URL)
defextract_url(text):pattern=r'https?://[^\s\'"<>]+'urls=re.findall(pattern,str(text))returnurls# 返回列表,可能有多个result=extract_url(input_text)模板8:清理多余空白字符
原始文本:连 衣 裙 (夏季款)
defclean_whitespace(text):"""去掉首尾空格,中间多个空格合并为一个"""text=str(text).strip()text=re.sub(r'\s+',' ',text)# 中间多空格→单空格text=re.sub(r'\n+','\n',text)# 多个换行→单换行returntext result=clean_whitespace(input_text)模板9:判断字符串是否为纯数字或特定格式
defis_valid_price(text):"""判断是否为合法价格格式(正数,最多2位小数)"""text=str(text).strip()returnbool(re.fullmatch(r'\d+(\.\d{1,2})?',text))defis_valid_phone(text):"""判断是否为合法手机号"""returnbool(re.fullmatch(r'1[3-9]\d{9}',str(text).strip()))result=is_valid_price(input_text)模板10:批量替换敏感信息(数据脱敏)
defdesensitize(text):"""手机号和邮箱脱敏"""# 手机号中间4位替换为****text=re.sub(r'(1[3-9]\d{2})\d{4}(\d{4})',r'\1****\2',str(text))# 邮箱用户名只显示前2个字符text=re.sub(r'([a-zA-Z0-9._%+-]{2})[a-zA-Z0-9._%+-]+(@[a-zA-Z0-9.-]+)',r'\1***\2',[video(video-Xb5DGYLk-1781422373176)(type-csdn)(url-https://live.csdn.net/v/embed/524993)(image-https://v-blog.csdnimg.cn/asset/a547123d88ad712dccba346c9217e237/cover/Cover0.jpg)(title-TEMU店群如何管理运营?)]text)returntext result=desensitize(input_text)三、如何在影刀里使用这些模板
标准用法:
拖入"Python代码"指令
配置输入变量:
input_text→ 绑定到上一步获取到的文本变量把对应模板粘贴进代码块(注意最后一行要是
result = ...)配置输出变量:把
result绑定到一个影刀变量
批量处理(整列数据):
importre,pandasaspd# 假设 data_list 是从影刀传进来的列表变量# 批量处理整列价格result=[extract_price(item)foritemindata_list]四、正则测试工具
写好正则后先测试,不要直接放进流程:
- regex101.com:在线测试,可以看到每个捕获组匹配了什么,还有语法解释
- 浏览器控制台:
"¥1,234".match(/[\d,]+/),快速验证
五、常见正则符号速查
| 符号 | 含义 | 示例 |
|---|---|---|
\d | 一个数字 | \d+匹配多个数字 |
\s | 空白字符(空格/换行/Tab) | \s+匹配多个空白 |
\w | 字母/数字/下划线 | \w+匹配单词 |
. | 任意单个字符 | a.b匹配 axb |
+ | 1次或多次 | \d+至少一个数字 |
* | 0次或多次 | \d*零个或多个数字 |
? | 0次或1次(可选) | \d?零个或一个数字 |
{n,m} | n到m次 | \d{1,2}1-2个数字 |
[abc] | abc中的一个 | [0-9]等价于\d |
(...) | 分组/捕获 | (\d+)元捕获数字 |
^ | 字符串开头 | ^1[3-9]以1开头 |
$ | 字符串结尾 | \d+$以数字结尾 |
#影刀RPA #Python正则表达式 #数据清洗 #RPA进阶教程 #电商自动化
作者:林焱
本文为影刀RPA系列文章之一,内容源于实操经验整理与分享。