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

您可以在其中自定义正则表达式JMP。
虽然内置表达式很有用,但数据清理可能需要更适合数据集的更多自定义表达式。 让我们看一个简单的例子,比如删除文本字符串中的所有数字。 正则表达式 '\d+' 将完成此任务。 此表达式使用 '\d'元字符匹配所有数字 (0-9),以及 '+'量词表示应匹配一位或多位数字。 如果我们将这个正则表达式应用到字符串“I have 5 apples and 10 oranges”,数字“5”和“10”将被识别。 通过用空字符串替换这些数字,您已经有效地清除了所有现有数字的数据。
让我们分析一下HTML 链接抓取器解释一个更复杂的例子。 JMP 中内置的正则表达式如下:
<A>]*?)\3[^>]*)|(\s*[a-z]+\s*=\s*('|")([^>]*?)\6))*\s*></A>
下表总结了上述表达式的每个重要部分:
| '<一个' |
此元字符在 HTML 中搜索表示超链接的起始锚标记。 |
| 'href\s*=\s*('|")' |
此部分匹配属性“href”,后跟等号和可选空格,然后是单引号 (') 或双引号 (")。 它捕获反向引用中的开头引号。 |
| '([^>]*?)' |
这匹配任何不是右尖括号 (>) 的字符。 最重要的是,它捕获了该表达式的主要目的 URL。 请注意,此部分类似于格式说明符在C编程中。 |
| '(\s*[az]+\s*=\s*('|")([^>]*?)\6)' |
此模式匹配锚标记内的任何其他属性。 它捕获属性名称、等号、可选空格、属性值(引号内),并确保结束引号与开始引号匹配。 |
(看在正则表达式编辑器 (jmp.com) 中自定义正则表达式了解更多信息)
虽然这些属性和模式可能看起来很复杂,但有大量文档和资源可用于学习和理解每个标志代表的含义。
正则表达式的应用
那么既然我们确切地知道了正则表达式是什么以及可以做什么,那么它在什么地方最有用呢?
好吧,很难将其缩小到只有一个应用程序,但我将向您介绍我为文本分析项目所做的一些数据过滤示例,该项目涵盖来自 JMP 用户社区讨论部分的数据。 该项目的最终目标是找到在用户社区的讨论中发布的最常用的术语和短语。
下面显示的是来自其中一个的示例超过四万八千讨论意见。 请注意, 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 文件的任何文本列。
选择“通过文本匹配新建列”将打开与文本资源管理器中相同的正则表达式编辑器窗口。 整个数据管理过程完全相同,但是,您过滤后的文本现在将自动格式化为新列,如下图所示:

相同的过程显示在 Text Explorer 窗口之外。
最后的想法
正则表达式是数据探索领域不可或缺的工具。 它们提供了一种通用的解决方案,用于将文本字符串操作和匹配到所需的输出。 使用正则表达式,我们可以释放数据的全部潜力。
有关正则表达式的更多信息,请参阅:
在正则表达式编辑器 (jmp.com) 中自定义正则表达式
正则表达式中的量词 |微软学习
正则表达式参考 (regular-expressions.info)
正则表达式函数 (jmp.com)
帮助