想像一下:您是一位無所畏懼的數據探索者,冒險深入原始數據的原始荒野。 帶著可信賴的電子表格和一杯咖啡,您開始尋求提取有意義的見解。 但是,遺憾的是,您遇到的是格式不一致、神秘符號和拼寫錯誤的叢林,它們似乎有自己的生命。 不要害怕,勇敢的數據管理員,因為在這個混亂的領域,有一個秘密武器在等著你:常用表達,數據清理的超級英雄斗篷。
什麼是正則表達式?
核心是正則表達式,通常稱為正則表達式, 是定義搜索模式的強大字符序列。 它是一種用於各種編程語言和文本編輯器的多功能工具操縱和匹配字符串文本基於具體模式或規則. 正則表達式允許您簡潔地表達複雜的搜索模式,從而更容易查找、提取或修改文本數據的特定部分。 通過組合字符、元字符和量詞,您可以創建匹配特定序列、字符或更大文本中更複雜結構的正則表達式模式。 憑藉其廣泛的應用,正則表達式已成為數據清理、文本處理和模式識別任務的寶貴資源。
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)
幫助