在处理产品数据、订单信息或任何包含大量重复格式文本的工作中,我们经常需要从成百上千行数据里提取出关键信息,比如 SKU (商品唯一编码)。一行一行地手动复制粘贴不仅效率低下,还极易出错。
本文将带你深入学习如何利用 Notepad++ 这款强大的免费文本编辑器,通过正则表达式功能,一键提取所有 SKU,并将其整理成干净的列表,彻底告别手动复制的低效工作。
目录
准备工作
- Notepad++: 确保您已安装 Notepad++。
- 数据文件: 将包含 SKU 信息的原始文本保存为纯文本文件(如
data.txt
)。
示例文本 (data.txt
):
Product Name: Awesome Widget, Category: Gadgets, SKU: W2121137324, Stock: 100
Some random text here…
Details for item, ID: 556, SKU: W834P323321, on sale.
Description: Another great product, part number and SKU: W2824S00094-NEW_V2.
Invalid line without SKU.
Final item in list, SKU: ABC.123_XYZ, available now.
方法一:快速查找与定位 (适合审查数据)
这个方法适合当你只想快速查看所有 SKU 在原文中的位置,而不急于提取它们时。
1. 打开“查找”窗口
- 在 Notepad++ 中打开你的
data.txt
文件。 - 按下快捷键
Ctrl + F
,打开“查找”窗口。
2. 输入正则表达式
- 在 查找目标 (Find what) 框中输入以下正则表达式:
regex SKU:\s*([A-Za-z0-9._-]+)
- 在窗口下方,确保勾选了 正则表达式 (Regular expression) 模式。
- 点击 在当前文档中查找所有 (Find All in Current Document)。
3. 分析查找结果
Notepad++ 的底部会弹出“查找结果”面板,列出所有匹配到的行和具体内容,SKU 部分会被高亮。
正则表达式解析:
元素 | 作用 |
---|---|
SKU: | 精确匹配以 “SKU:” 开头的字符串。 |
\s* | 匹配 “SKU:” 后面的任意数量的空白字符(空格、制表符等)。 |
([A-Za-z0-9._-]+) | 捕获组 (Capture Group)。这是核心部分,它会捕获并“记住”括号内匹配到的所有字符。我们定义的字符集包括:大小写字母、数字、点 . 、下划线 _ 和短横线 - 。 |
这个方法很好,但想把这些 SKU 复制出来,还需要后续处理,效率不高。接下来,我们将介绍终极技巧。
方法二:一键提取并生成纯净列表 (终极技巧)
这是本文的核心,我们将使用“查找与替换”功能,利用正则表达式的捕获组,一步到位生成干净的 SKU 列表。
1. 打开“替换”窗口
- 按下快捷键
Ctrl + H
,打开“替换”窗口。
2. 输入查找和替换规则
- 查找目标 (Find what): 输入一个更完整的行匹配表达式:
regex ^.*?SKU:\s*([A-Za-z0-9._-]+).*$
- 替换为 (Replace with): 输入
\1
。
3. 执行替换
- 确保勾选了 正则表达式 (Regular expression) 模式。
- 点击 全部替换 (Replace All)。
4. 查看奇迹
你会发现,文档中所有包含 SKU 的行都被替换成了该行对应的 SKU 值,而不包含 SKU 的行则保持原样。
发生了什么?
^
和$
分别代表一行的开始和结束。.*?
匹配了从行首到 “SKU:” 之前的所有字符,以及 SKU 值之后到行尾的所有字符。\1
是一个反向引用 (Backreference),它代表了“查找目标”中第一个捕获组()
所匹配到的内容。在这里,它就是我们想要的纯净 SKU 字符串。- 整个操作的含义是:找到包含 SKU 的每一行,然后用该行提取出的 SKU 值替换掉整行内容。
5. 清理无关行
现在文档里只剩下 SKU 和一些不含 SKU 的原始行。
- 将光标放在一个不含 SKU 的行上。
- 点击菜单栏 搜索 (Search) -> 书签 (Bookmark) -> 标记所有匹配行 (Mark All)。
- 再次点击菜单栏 搜索 (Search) -> 书签 (Bookmark) -> 删除已标记行 (Remove Bookmarked Lines)。
- (更简单的方法)或者,使用替换功能删除不包含 SKU 的行:
Ctrl + H
打开替换窗口。- 查找目标:
^(?!.*SKU:).*$\r?\n?
(这会匹配所有不含 “SKU:” 的行) - 替换为: (留空)
- 点击全部替换。
最终,你就得到了一个纯净的 SKU 列表!
进阶技巧与拓展
1. 处理更复杂的 SKU 格式
如果你的 SKU 包含其他特殊字符,比如斜杠 /
或井号 #
,只需在字符集 []
中加入它们即可。
- 例如 SKU 为
ABC/123#XYZ
- 正则表达式应修改为:
SKU:\s*([A-Za-z0-9._\-/
#]+)
2. 直接输出为指定格式
你可以直接在“替换为”框中添加前后缀,一步生成 Markdown 列表或 CSV 格式。
- 生成 Markdown 列表:
- 替换为:
- \1
- 替换为:
- 生成带引号的 CSV:
- 替换为:
"\1",
- 替换为:
3. 同时提取多个值
假设你想同时提取 SKU 和价格 (Price)。
- 示例文本:
... SKU: W123 Price: $99.99 ...
- 查找目标:
^.*?SKU:\s*([A-Za-z0-9._-]+).*?Price:\s*\$([\d.]+).*$
- 替换为:
\1,\2
- 结果:
W123,99.99
\1
对应第一个括号(SKU),\2
对应第二个括号(价格)。
总结
通过掌握 Notepad++ 中基于捕获组的“查找与替换”功能,你可以将重复性的数据提取工作效率提升数十倍。这种方法不仅限于 SKU,同样适用于提取邮箱、电话号码、链接等任何有固定模式的文本。希望这篇教程能让你彻底告别繁琐的手动操作,拥抱自动化的数据处理思维。