想象一下:您是一位无所畏惧的数据探索者,正在深入探索原始数据的未开化荒野。带着值得信赖的电子表格和一杯咖啡,您开始寻求提取有意义的见解。但可惜的是,您遇到的是格式不一致、神秘符号和拼写错误的丛林,它们似乎都有自己的生命。勇敢的数据管理员,不要害怕,因为在这个混乱的领域,有一个秘密武器正在等待着:正则表达式,数据清理的超级英雄斗篷。
什么是正则表达式?
正则表达式(通常称为regex )的核心是定义搜索模式的强大字符序列。它是一种多功能工具,用于各种编程语言和文本编辑器中,用于根据特定模式或规则操作和匹配文本字符串。正则表达式允许您简洁地表达复杂的搜索模式,从而更轻松地查找、提取或修改文本数据的特定部分。通过组合字符、元字符和量词,您可以创建匹配较大文本正文中的特定序列、字符甚至更复杂结构的正则表达式模式。凭借其广泛的应用,正则表达式已成为数据清理、文本处理和模式识别任务的宝贵资源。
JMP 中的正则表达式
在 JMP 中,可以通过文本资源管理器 > 解析选项 > 自定义正则表达式中的红色小三角来访问和自定义正则表达式。有多种正则表达式可供使用,例如HTML 链接抓取器和数字荧光笔。

您可以在其中自定义正则表达式JMP。
虽然内置表达式很有用,但数据清理可能需要更多更适合数据集的自定义表达式。让我们看一个简单的示例,例如删除文本字符串中的所有数字。正则表达式“\d+”将完成此任务。该表达式使用“\d”元字符来匹配所有数字 (0-9),并使用“+”量词来指示应匹配一个或多个数字。如果我们将此正则表达式应用于字符串“我有 5 个苹果和 10 个橙子”,则将识别数字“5”和“10”。通过用空字符串替换这些数字,您已经有效地清除了数据中所有存在的数字。
让我们分析HTML 链接抓取器来解释一个更复杂的示例。 JMP 中内置的正则表达式如下:
<A>]*?)\3[^>]*)|(\s*[a-z]+\s*=\s*('|")([^>]*?)\6))*\s*></A>
上述表达式的每个重要部分总结在下表中:
| < d>
| 此元字符在 HTML 中搜索表示超链接的起始锚标记。 |
| href\s*=\s*('|") |
此部分匹配属性“href”,后跟等号和可选空格,然后是单引号 (') 或双引号 (")。它捕获反向引用中的左引号。 |
| ([^>]*?) |
这匹配非右尖括号 (>) 的任何字符。最重要的是,它捕获 URL,这是该表达式的主要目的。请注意,本节类似于 C 编程中的格式说明符。 |
| (\s*[az]+\s*=\s*('|")([^>]*?)\6) |
此模式与锚标记内的任何其他属性相匹配。它捕获属性名称、等号、可选空格、属性值(引号内),并确保结束引号与开始引号匹配。 |
(有关更多信息,请参阅在正则表达式编辑器 (jmp.com) 中自定义 Regex )
虽然这些属性和模式可能看起来很复杂,但有大量文档和资源可用于学习和理解每个标志代表的含义。
正则表达式的应用
既然我们确切地知道了正则表达式是什么以及可以做什么,那么它在哪里最有用呢?
嗯,很难将其范围缩小到仅一个应用程序,但我将向您介绍我为文本分析项目所做的一些数据过滤的示例,其中涵盖了来自 JMP 用户社区讨论部分的数据。该项目的最终目标是找到用户社区讨论中发布的最常用术语和短语。
下面显示的是48,000 多条讨论评论中的一个示例。请注意, HTML 格式和JSL 脚本使得确定原始评论中使用的词汇变得非常困难。

正则表达式清理之前的数据样本。
手动清理这些术语和格式化可能需要数月甚至数年才能完成,但只需使用一些正则表达式,清理就可以立即完成。
首先,我想删除讨论中的所有 JSL 脚本语言内容。为了实现这一点,我使用了以下正则表达式:
<CODE class=" language-jsl">[\s\S]*?<\/CODE>|
|((([€¥₩£\$]|r\$)\s{0,2}[\.,]?[0-9][\.,0-9]*)|([\.,]?[0-9][\.,0-9]*\s{0,2}([€¥₩£\$]|r\$)))
接下来,我想从数据中删除所有 HTML 和 CSS 格式标记:
<[^>]*>
最后,我想删除所有数字、小数和包含数字的单词:
\d+(\.\d+)?|\.\d+
查看相同的原始示例消息,您可以在下面看到每个表达式如何过滤指定的参数:

过滤后的数据。未过滤的单词以黄色突出显示。
探索结果
一旦我们过滤完自定义表达式,我们的结果会如何变化?让我们看一下原始数据集和未过滤数据集的词云与正则表达式清理集的词云的并排比较:
旧(无正则表达式)
|
新(使用正则表达式)
|
|
|
请注意,在使用正则表达式之前,数据中填充有 HTML 格式、JSL 格式和完全不相关的内容。就我的分析目的而言,这些数据完全无关。使用正则表达式后,数据对于分析更加有用,并且可以通过更多工作提供非常有趣的结果。
对清理后的数据进行主题分析可以得出以下结果,了解用户社区中最常回答的主题,如下所示:

讨论数据五主题分析
提供的五个主题可以概括为用户询问的不同类别的问题:
- 主题#1:实验设计 (DOE)
- 主题#2:预测建模和机器学习
- 主题#3:指导性答案
- 主题#4:数据格式化和分析
- 主题#5:编程和脚本编写
正则表达式列文本匹配
正则表达式不仅限于在文本探索窗口中应用;您还可以在使用字符串公式创建新数据列时访问它们。要访问此选项,请查看“列”->“实用程序”->“按文本匹配新建列”。

正则表达式可在 JMP 文件的任何文本列中使用。
选择“通过文本匹配新建列”将打开与文本资源管理器中相同的正则表达式编辑器窗口。整个数据管理过程完全相同,但是,您过滤的文本现在将自动格式化为新列,如下图所示:

相同的过程显示在文本资源管理器窗口之外。
最后的想法
正则表达式是数据探索领域不可或缺的工具。它们提供了一种通用的解决方案,用于操作文本字符串并将其匹配到所需的输出。通过正则表达式,我们可以释放数据的全部潜力。
有关正则表达式的更多信息,请参阅:
Customize Regex in the Regular Expression Editor (jmp.com)
正则表达式中的量词 |微软学习
正则表达式参考 (regular-expressions.info)
正则表达式函数 (jmp.com)
JMP 帮助
感谢您的博文!
我最喜欢访问的网站之一是 regex101.com,这是构建和测试正则表达式的好地方。 使用这个工具我学到了很多东西。
布拉德,这是一篇多么精彩、内容丰富的帖子啊! 我上周了解了正则表达式,这是一个非常有用的介绍。 我希望其他人都能对正则表达式感到兴奋。