Notepad++ 正则表达式高效提取 SKU:从入门到精通

在处理产品数据、订单信息或任何包含大量重复格式文本的工作中,我们经常需要从成百上千行数据里提取出关键信息,比如 SKU (商品唯一编码)。一行一行地手动复制粘贴不仅效率低下,还极易出错。

本文将带你深入学习如何利用 Notepad++ 这款强大的免费文本编辑器,通过正则表达式功能,一键提取所有 SKU,并将其整理成干净的列表,彻底告别手动复制的低效工作。

准备工作

  1. Notepad++: 确保您已安装 Notepad++。
  2. 数据文件: 将包含 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,同样适用于提取邮箱、电话号码、链接等任何有固定模式的文本。希望这篇教程能让你彻底告别繁琐的手动操作,拥抱自动化的数据处理思维。

By 行政