想像一下:您是一位無所畏懼的數據探索者,正在深入探索原始數據的未開化荒野。帶著值得信賴的電子表格和一杯咖啡,您開始尋求提取有意義的見解。但可惜的是,您遇到的是格式不一致、神秘符號和拼字錯誤的叢林,它們似乎都有自己的生命。勇敢的資料管理員,不要害怕,因為在這個混亂的領域,有一個秘密武器正在等待著:正則表達式,資料清理的超級英雄斗篷。
什麼是正規表示式?
正規表示式(通常稱為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,這是構建和測試正則表達式的好地方。 使用這個工具我學到了很多東西。
布拉德,這是一篇多麼精彩、內容豐富的帖子啊! 我上週了解了正則表達式,這是一個非常有用的介紹。 我希望其他人都能對正則表達式感到興奮。