ExtractRegExGroup - 指令碼與圖表函數
ExtractRegExGroup() 會使用指定的複合規則運算式模式從輸入字串運算式中擷取文字。使用該函數時,請指定要在複合 Regex 中使用的群組。如果未找到相符項,則該函數將傳回空值。
如果在 LOAD 陳述式中使用 ExtractRegExGroup() 函數並且省略 field_no,則函數將傳回多筆記錄。如果使用 ExtractRegExGroup() 載入數個欄位,則會建立所有組合的 Cartesian 產品。
此函數執行區分大小寫的 Regex 操作。您也可以使用變體 ExtractRegExGroupI() 來執行不區分大小寫的 Regex 操作。
語法:
ExtractRegExGroup (text, regex, group [, field_no])
傳回的資料類型: 字串
引數 | 描述 |
---|---|
text | 包含要在傳回值中擷取之文字的字串運算式。 |
regex | 用於擷取文字的規則運算式。 |
group |
在複合規則運算式的情況下,群組的編號。 如果規則運算式僅包含一個群組,請改用 ExtractRegEx() 函數。或者,使用 ExtractRegExGroup() 且 group 值為 0。 您可以指定負 group 值以從右到左搜尋相符項。 |
field_no |
要擷取之相符項的編號。當可能在文字中找到規則運算式的多個相符項時,這非常有用。例如,指定值 4 以擷取第四個相符項。 此為選用引數。如果未指定,則預設為 1。 |
範例 | 結果 |
---|---|
ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',1) | 傳回 abc (第一個相符項的第一個群組)。 |
ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',1,2) | 傳回 def (第二個相符項的第一個群組)。 |
ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',2) | 傳回 123 (第一個相符項的第二個群組)。 |
ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',2,2) | 傳回 456 (第二個相符項的第二個群組)。 |
使用情境
您可以使用 Extract RegEx() 從可能還包含其他資訊之資料 (例如,自由文字或 JSON 字串) 中擷取想要隔離的資訊。例如︰
-
從文字中擷取電子郵件地址、電話號碼、帳號和其他資訊。
-
從文字中擷取數值 (例如貨幣)。
-
標準化文字或數字資料的格式。
範例 1 – 用於剖析交易代碼的載入指令碼
概述
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
名為 Transactions 的表格,其中包含有關交易的資訊。使用下列語法透過交易代碼擷取某些詳細資訊:
交易年份-交易來源 (線上購買還是店內購買)-關聯配送中心
-
建立多個新欄位來擷取每個詳細資訊,每個欄位都重複使用相同的複合規則運算式。
我們的要求:
-
年份可以是四個數字的任意組合。
-
值 ONLINE 和 INSTORE 是交易來源唯一可接受的值。
-
配送中心必須剛好有五個號碼。
載入指令碼
Transactions:
Load
recno() as RecordID,
ExtractRegExGroup(TransactionCode,'([0-9]{4})-(ONLINE|INSTORE)-([0-9]{5})',0) as TransactionCode_Unparsed,
ExtractRegExGroup(TransactionCode,'([0-9]{4})-(ONLINE|INSTORE)-([0-9]{5})',1) as TransactionYear,
ExtractRegExGroup(TransactionCode,'([0-9]{4})-(ONLINE|INSTORE)-([0-9]{5})',2) as TransactionSource,
ExtractRegExGroup(TransactionCode,'([0-9]{4})-(ONLINE|INSTORE)-([0-9]{5})',3) as TransactionDC,
* Inline `
TransactionCode, Category
2025-ONLINE-60019, Product A
2024-INSTORE-60020, Product B
2025-ONLINE-60018, Product C
2024-ONLINE-60020, Product A
2025-INSTORE-60019, Product B
2025-ONLINE-60017, Product D
`;
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
RecordID
-
TransactionCode
-
TransactionCode_Unparsed
-
TransactionYear
-
TransactionSource
-
TransactionDC
RecordID | TransactionCode | TransactionCode_Unparsed | TransactionYear | TransactionSource | TransactionDC |
---|---|---|---|---|---|
1 | 2025-ONLINE-60019 | 2025-ONLINE-60019 | 2025 | ONLINE | 60019 |
2 | 2024-INSTORE-60020 | 2024-INSTORE-60020 | 2024 | INSTORE | 60020 |
3 | 2025-ONLINE-60018 | 2025-ONLINE-60018 | 2025 | ONLINE | 60018 |
4 | 2024-ONLINE-60020 | 2024-ONLINE-60020 | 2024 | ONLINE | 60020 |
5 | 2025-INSTORE-60019 | 2025-INSTORE-60019 | 2025 | INSTORE | 60019 |
6 | 2025-ONLINE-60017 | 2025-ONLINE-60017 | 2025 | ONLINE | 60017 |
這些結果醒目提示了如何透過 group 引數為多個操作重複使用單一 Regex。TransactionCode_Unparsed 欄位使用 group 值 0,在這種情況下不提供任何附加價值,在此處顯示僅出於示範函數之目的。
範例 2 – 用於擷取業務聯絡資訊的載入指令碼
概述
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
名為 BusinessContactInfo 的表格,其中包含在每個公司網站上找到的公司相關資訊。
-
ContactInfo 是包含自由文字的欄位,包括公司電子郵件地址和電話號碼。
-
建立多個新欄位來擷取每個詳細資訊,每個欄位都重複使用相同的複合規則運算式。
我們的要求:
-
電子郵件地址必須滿足一組特定的要求和語法。
-
電話號碼必須是 10 位 NANP 電話號碼。我們希望允許將區號括在方括弧中,並允許在某些位置使用空格和連字號。
載入指令碼
BusinessContactInfo:
Load
ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&*\-_+=~{|}\/.'']{1,50})|(\({0,1}[0-9]{3}\){0,1}[ -]*[0-9]{3}[ -]*[0-9]{4})',1,1) as CompanyEmail,
ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&*\-_+=~{|}\/.'']{1,50})|(\({0,1}[0-9]{3}\){0,1}[ -]*[0-9]{3}[ -]*[0-9]{4})',2,2) as CompanyPhoneNum,
* Inline `
ID CompanyName ContactInfo
1 Company A Email is: Company1@example.com, Phone number is: (123) 456-7890
2 Company B Email is: company2@test.com, Phone # is: 0123456790
3 Company C Email is: company3@placeholder.com, Phone no. is: 234-567-8901
` (delimiter is '\t');
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
CompanyName
-
CompanyEmail
-
CompanyPhoneNum
CompanyName | CompanyEmail | CompanyPhoneNum |
---|---|---|
Company A | Company1@example.com | (123) 456-7890 |
Company B | company2@test.com | 0123456790 |
Company C | company3@placeholder.com | 234-567-8901 |
重複使用相同的複合規則運算式來擷取不同的資訊。group 引數指定要搜尋兩個規則運算式群組中的哪一組,field_no 引數指定我們要尋找的整體相符項 (跨整個字串)。
此函數的 ExtractRegEGroupxI() 變體確保搜尋不區分大小寫。
範例 3 – 用於從 ISBN 代碼擷取元件的載入指令碼
概述
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
- 建立變數 ISBN_RegEx 來儲存我們要用於所有擷取的規則運算式。
- 書店想要從多個供應商處訂購之書籍的一組 ISBN 代碼。
我們需要從每個 ISBN 代碼中擷取下列內容:
-
EAN
-
群組
-
註冊者
-
出版品
-
總和檢查碼
載入指令碼
SET ISBN_RegEx = 'ISBN[ ]*([0-9]{3})-([0-9]{1})-([0-9]{4})-([0-9]{4})-([0-9]{1})';
ISBN:
LOAD Supplier,
ExtractRegExGroup(Books,'$(ISBN_RegEx)',1) AS EAN,
ExtractRegExGroup(Books,'$(ISBN_RegEx)',2) AS Group,
ExtractRegExGroup(Books,'$(ISBN_RegEx)',3) AS Registrant,
ExtractRegExGroup(Books,'$(ISBN_RegEx)',4) AS Publication,
ExtractRegExGroup(Books,'$(ISBN_RegEx)',5) AS Checksum;
// Split the ISBN with the Group function in a preceding load to avoid generating a cartesian product
LOAD *,
ExtractRegEx(SupplierBooks, '$(ISBN_RegEx)') AS Books
INLINE [
Supplier, SupplierBooks
Supplier 1, ISBN 123-3-1234-1234-0 ISBN 012-2-0123-0123-4 ISBN 000-1-0123-0123-2 ISBN 234-5-2345-2345-1 ISBN 555-2-5555-5555-3 ISBN 222-4-2222-2222-2
Supplier 2, ISBN 000-0-3333-3333-3 ISBN 333-3-3333-3333-3 ISBN 555-1-5151-5151-3 ISBN 232-1-2323-2323-1 ISBN 008-0-7777-7777-3 ISBN 888-0-9999-0000-0
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
Supplier
-
EAN
-
Group
-
Registrant
-
Publication
-
Checksum
Supplier | EAN | Group | Registrant | Publication | Checksum |
---|---|---|---|---|---|
Supplier 1 | 000 | 1 | 0123 | 0123 | 2 |
Supplier 1 | 012 | 2 | 0123 | 0123 | 4 |
Supplier 1 | 123 | 3 | 1234 | 1234 | 0 |
Supplier 1 | 222 | 4 | 2222 | 2222 | 2 |
Supplier 1 | 234 | 5 | 2345 | 2345 | 1 |
Supplier 1 | 555 | 2 | 5555 | 5555 | 3 |
Supplier 2 | 000 | 0 | 3333 | 3333 | 3 |
Supplier 2 | 008 | 0 | 7777 | 7777 | 3 |
Supplier 2 | 232 | 1 | 2323 | 2323 | 1 |
Supplier 2 | 333 | 3 | 3333 | 3333 | 3 |
Supplier 2 | 555 | 1 | 5151 | 5151 | 3 |
Supplier 2 | 888 | 0 | 9999 | 0000 | 0 |
範例 4 – 用於擷取業務聯絡資訊的圖表運算式 (使用 ExtractRegEx() 比較)
概述
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
名為 BusinessContactInfo 的表格,其中包含在每個公司網站上找到的公司相關資訊。
-
ContactInfo 是包含自由文字的欄位,包括公司電子郵件地址和電話號碼。我們希望用圖表運算式擷取每個電子郵件地址和電話號碼。
我們的要求:
-
電子郵件地址必須滿足一組特定的要求和語法。
-
電話號碼必須是 10 位 NANP 電話號碼。我們希望允許將區號括在方括弧中,並允許在某些位置使用空格和連字號。
載入指令碼
BusinessContactInfo:
Load * Inline `
ID CompanyName ContactInfo
1 Company A Email is: Company1@example.com, Phone number is: (123) 456-7890
2 Company B Email is: company2@test.com, Phone # is: 0123456790
3 Company C Email is: company3@placeholder.com, Phone no. is: 234-567-8901
` (delimiter is '\t');
結果
載入資料並開啟工作表。建立新的表格並將此欄位新增為維度:
-
CompanyName
將下列計算維度新增至表格:
-
=ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&*\-_+=~{|}\/.'']{1,50})|(\({0,1}[0-9]{3}\){0,1}[ -]*[0-9]{3}[ -]*[0-9]{4})',1,1)
-
=ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&*\-_+=~{|}\/.'']{1,50})|(\({0,1}[0-9]{3}\){0,1}[ -]*[0-9]{3}[ -]*[0-9]{4})',2,2)
CompanyName | =ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&*\-_+=~{|}\/.'']{1,50})|(\({0,1}[0-9]{3}\){0,1}[ -]*[0-9]{3}[ -]*[0-9]{4})',1,1) | =ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&*\-_+=~{|}\/.'']{1,50})|(\({0,1}[0-9]{3}\){0,1}[ -]*[0-9]{3}[ -]*[0-9]{4})',2,2) |
---|---|---|
Company A | Company1@example.com | (123) 456-7890 |
Company B | company2@test.com | 0123456790 |
Company C | company3@placeholder.com | 234-567-8901 |
重複使用相同的複合規則運算式來擷取不同的資訊。group 引數指定要搜尋兩個規則運算式群組中的哪一組,field_no 引數指定我們要尋找的整體相符項 (跨整個字串)。
此函數的 ExtractRegEGroupI() 變體確保搜尋不區分大小寫。
範例 5 – URL 剖析 (使用 ExtractRegEx() 比較)
概述
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
名為 Correspondence 的表格,其中名為 EmailBody 的欄位中包含電子郵件文字。
-
包含網址的電子郵件內容。
我們希望將第二個 URL (如果存在) 擷取到以下元件中:
-
完整 URL
-
通訊協定
-
網域
-
路徑
我們希望使用單一規則運算式來控制所有擷取。
載入指令碼
Correspondence:
Load * Inline `
ID EmailBody
1 Thanks again for this morning's meeting! You can find the meeting minutes posted here: https://example.com/resourceexample. If you still have any questions, always feel free to ask me or one of the other team members. Here are a few learning resources that might help you: http://www.example.ca/training1.pptx http://www.example.ca/training2.pptx http://www.example.ca/training3.pptx Thanks again!
2 Hi, you'll want to visit our company website for that, it's available at https://www.example.se.
3 Hello all, I just wanted to let you know that our online stores are now up and running! I couldn't be more excited. We are already seeing quite a bit of traffic and volume sold, which is very promising! For Product A, go to https://www.examplestore1.com/products. For Product B, you'll want go to https://www.examplestore2.com/products. Product C, go check out https://www.examplestore3.com/products. Cheers!
` (delimiter is '\t');
結果
載入資料並開啟工作表。建立新的表格並將此欄位新增為維度:
-
ID
新增這些計算維度:
-
URL 2:
=ExtractRegEx(EmailBody,'([a-zA-Z0-9]+):\/\/(([a-zA-Z0-9]+\.)*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+))((\/[a-zA-Z0-9]+)*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))?',2)
-
URL 2 通訊協定:
=ExtractRegExGroup(EmailBody,'([a-zA-Z0-9]+):\/\/(([a-zA-Z0-9]+\.)*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+))((\/[a-zA-Z0-9]+)*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))?',1,2)
-
URL 2 網域:
=ExtractRegExGroup(EmailBody,'([a-zA-Z0-9]+):\/\/(([a-zA-Z0-9]+\.)*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+))((\/[a-zA-Z0-9]+)*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))?',2,2)
-
URL 2 路徑:
=ExtractRegExGroup(EmailBody,'([a-zA-Z0-9]+):\/\/(([a-zA-Z0-9]+\.)*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+))((\/[a-zA-Z0-9]+)*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))?',6,2)
ID | URL 2 | URL 2 通訊協定 | URL 2 網域 | URL 2 路徑 |
---|---|---|---|---|
1 | http://www.example.ca/training1.pptx | http | www.example.ca | /training1.pptx |
2 | - | - | - | - |
3 | https://www.examplestore2.com/products | https | www.examplestore2.com | /products |
ExtractRegEx() 傳回整個 URL,而 ExtractRegExGroup() 傳回 URL 的各個部分,對應到我們使用的 group 值。 ID 值為 2 的記錄只包含一個 URL,因此不會傳回任何資料。
所有圖表運算式都使用相同的規則運算式來傳回不同的資訊。規則運算式中定義的群組之細分如下。
群組編號 | 規則運算式 | URL 部分 |
---|---|---|
1 | ([a-zA-Z0-9]+) | 通訊協定 |
2 | (([a-zA-Z0-9]+\.)*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+)) | 網域 (第 3、4 和 5 組) |
3 | ([a-zA-Z0-9]+\.)* | 根網域 |
4 | ([a-zA-Z0-9]+) | 頂層網域 |
5 | ([a-zA-Z0-9]+) | 路徑 (第 7、8、9 和 10 組) (選用) |
6 | ((\/[a-zA-Z0-9]+)*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))? | 子目錄 |
7 | (\/[a-zA-Z0-9]+)* | 檔案(第 9 組和第 10 組) |
8 | (\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?) | 檔案 |
9 | ([a-zA-Z0-9]+) | 檔案名稱 |
10 | (\.[a-zA-Z0-9]+)? | 副檔名 (選用) |