# ExtractRegEx - 指令碼與圖表函數

ExtractRegEx() 會使用指定的規則運算式模式從輸入字串運算式中擷取文字。如果未找到相符項，則該函數將傳回空值。

此函數執行區分大小寫的 Regex 操作。您也可以使用變體 ExtractRegExI() 來執行不區分大小寫的 Regex 操作。

語法：

ExtractRegEx (text, regex [, field\_no])

傳回的資料類型： 字串

引數

| 引數 | 描述 |
| --- | --- |
| text | 包含要在傳回值中擷取之文字的字串運算式。 |
| regex | 用於擷取文字的規則運算式。 |
| field\_no | 要擷取之相符項的編號。當可能在文字中找到規則運算式的多個相符項時，這非常有用。例如，指定值 `4` 以擷取第四個相符項。此為選用引數。指定負值以反轉相符項的順序。<br><br>無論該函數是在載入指令碼還是圖表運算式中使用，以下內容都適用：<br><br><ul> <li> <p>如果 <span>field_no</span> 為正，則函數將傳回一個值，從左到右識別相符項。</p> </li> <li> <p>如果 <span>field_no</span> 為負，則函數將傳回一個值，從右到左識別相符項。</p> </li> </ul><br><br>當在載入指令碼中使用該函數時：<br><br><ul> <li> <p>如果在 <span>LOAD</span> 陳述式中使用 <span>ExtractRegEx()</span> 函數且省略 <span>field_no</span>，則函數會產生與相符項一樣多的記錄。</p> </li> <li> <p>如果使用 <span>ExtractRegEx()</span> 載入數個欄位且所有項均未指定 <span>field_no</span> 引數，則會建立所有組合的 Cartesian 產品。</p> </li> </ul><br><br>當在圖表運算式中使用該函數時：<br><br><ul> <li> <p>如果省略 <span>field_no</span>，則預設值為 <code>1</code>。</p> </li> </ul> |

函數範例

| 範例 | 結果 |
| --- | --- |
| `ExtractRegEx('a,b c;1 2,3','[a-z]\|[0-9]', 1)` | 傳回 `a`，這是找到的第一個相符項。 |
| `ExtractRegEx('a,b c;1 2,3','[a-z]\|[0-9]', 2)` | 傳回 `b`，這是找到的第二個相符項。 |
| `ExtractRegEx('a,b c;1 2,3','[a-z]\|[0-9]', 4)` | 傳回 `1`，這是找到的第四個相符項。 |
| `ExtractRegEx('abc','a\|b',-1)` | 傳回 `b`。當指定負值時，相符項將反向計數。 |
| `ExtractRegEx('A,B C;1 2,3','[a-c]\|[4-9]')` | 傳回 Null 值，因為 ExtractRegEx() 區分大小寫，且未使用不區分大小寫的變體。 |
| `ExtractRegExI('A,B C;1 2,3','[a-c]\|[4-9]')` | 傳回 `A`，因為使用了不區分大小寫的變體 ExtractRegExI()。 |

## 使用情境

您可以使用 Extract RegEx() 從可能還包含其他資訊之資料 (例如，自由文字或 JSON 字串) 中擷取想要隔離的資訊。例如︰

* 從文字中擷取電子郵件地址、電話號碼、帳號和其他資訊。

* 從文字中擷取數值 (例如貨幣)。

* 標準化文字或數字資料的格式。

## 範例 1 – 用於從 JSON 擷取電子郵件地址的載入指令碼

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/ExtractRegEx.htm)

#### 載入指令碼和結果

概述

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* 包含欄位 `OrderJson` 的表格 `OrderDetails`。

* 欄位 `OrderJson` 包含帶有訂單資料的 JSON 字串。已從 JSON 中移除格式 (例如縮排和換行符)。訂單資料包含我們想要擷取為單獨值的電子郵件地址。

* 一個新表格 `EmailAddresses`，在 `OrderDetails` 之後載入。在 `EmailAddresses` LOAD 陳述式中，我們從 `OrderDetails` 表格中載入 `OrderJson` 欄位，並建立一個新的計算欄位 `Email`，其中包含擷取的電子郵件地址。然後刪除 `OrderDetails`。

我們的要求：

* 特定網域中的電子郵件地址：`example.com`。

* 包含任意數量的字母數字字元以及一組定義的特殊字元的電子郵件地址。

載入指令碼

```
OrderDetails:

Load * Inline `
OrderJson
{"Orders":[{"order_id":"12345","customer":{"name":"John Doe","email":"john.doe@example.com"},"items":{"product":"Laptop","quantity":2,"price":1200},"total_price":2400},{"order_id":"12346","customer":{"name":"Jane Doe","email":"jane.doe@example.com"},"items":{"product":"Tablet","quantity":4,"price":400},"total_price":1600},{"order_id":"12347","customer":{"name":"Amalia Craig","email":"amalia.craig@example.com"},"items":{"product":"Desktop Computer","quantity":1,"price":1900},"total_price":1900},{"order_id":"12348","customer":{"name":"Ken Roberts","email":"ken.roberts@example.com"},"items":{"product":"Phone Charger Cable","quantity":110,"price":1900},"total_price":1210}]}
` (delimiter is '\t');

EmailAddresses:

Load OrderJson, ExtractRegEx(OrderJson, '[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@example.com') as Email Resident OrderDetails;

Drop table OrderDetails;
```

結果

載入資料並開啟工作表。建立新的表格並將此欄位新增為維度：

* `Email`

結果表格

| Email |
| --- |
| amalia.craig@example.com |
| jane.doe@example.com |
| john.doe@example.com |
| ken.roberts@example.com |

透過不指定 field\_no 的引數值，會將所有相符項自動擷取到單獨的值中。

## 範例 2 – 用於從貨幣金額中擷取數值的載入指令碼

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/ExtractRegEx.htm)

#### 載入指令碼和結果

概述

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* 包含銷售資料的表格 `Sales`。

* 在 `Sales` 表格中，有一個名為 `Amount` 的欄位，其中包含以美元為單位的交易金額。這些金額表示為字串，其中包括貨幣符號和代碼。

* `Sales`、`OrderAmountNumeric_USD` 中自訂欄位的定義，這會將每個金額擷取為純數值。 這些資料需要採用數字形式，以方便在圖表彙總中使用。

載入指令碼

```
SET DateFormat='MM-DD-YYYY';

Sales:

Load ExtractRegEx(Amount, '[0-9]+.[0-9]{2}') as OrderAmountNumeric_USD, * Inline `

OrderID, OrderDate, Product, Amount
1, '12-27-2024', Software, $100.31 USD
2, '12-28-2024', Electronics, $513.93 USD
3, '12-29-2024', Grocery, $34.66 USD
4, '12-30-2024', Furniture, $1124.58 USD
5, '12-31-2024', Software, $95.95 USD
6, '01-01-2025', Software, $601.00 USD
7, '01-02-2025', Grocery, $1534.20 USD
8, '01-03-2025', Produce, $51.49 USD
9, '01-04-2025', Home Improvement, $176.12 USD
10, '01-05-2025', Produce, $432.77 USD
11, '01-06-2025', Software, $270.01 USD
12, '01-07-2025', Electronics, $83.85 USD
13, '01-08-2025', Furniture, $65.65 USD
14, '01-09-2025', Electronics, $1526.39 USD
15, '01-10-2025', Software, $432.44 USD
16, '01-11-2025', Furniture, $888.15 USD
17, '01-12-2025', Furniture, $300.00 USD
18, '01-13-2025', Grocery, $109.53 USD
19, '01-14-2025', Furniture, $487.97 USD
20, '01-15-2025', Software, $65.09 USD
`;
```

結果

載入資料並開啟工作表。建立新的表格並將此欄位新增為維度：

* `OrderID`

* `Amount`

* `OrderAmountNumeric_USD`

結果表格

| OrderID | Amount | OrderAmountNumeric\_USD |
| --- | --- | --- |
| 1 | $100.31 USD | 100.31 |
| 2 | $513.93 USD | 513.93 |
| 3 | $34.66 USD | 34.66 |
| 4 | $1124.58 USD | 1124.58 |
| 5 | $95.95 USD | 95.95 |
| 6 | $601.00 USD | 601.00 |
| 7 | $1534.20 USD | 1534.20 |
| 8 | $51.49 USD | 51.49 |
| 9 | $176.12 USD | 176.12 |
| 10 | $432.77 USD | 432.77 |
| 11 | $270.01 USD | 270.01 |
| 12 | $83.85 USD | 83.85 |
| 13 | $65.65 USD | 65.65 |
| 14 | $1526.39 USD | 1526.39 |
| 15 | $432.44 USD | 432.44 |
| 16 | $888.15 USD | 888.15 |
| 17 | $300.00 USD | 300.00 |
| 18 | $109.53 USD | 109.53 |
| 19 | $487.97 USD | 487.97 |
| 20 | $65.09 USD | 65.09 |

## 範例 3 – 用於從 JSON 擷取電子郵件地址的圖表運算式

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/ExtractRegEx.htm)

#### 圖表運算式和結果

概述

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* 包含欄位 `OrderJson` 的表格 `OrderDetails`。

* 欄位 `OrderJson` 包含帶有訂單資料的 JSON 字串。已從 JSON 中移除格式 (例如縮排和換行符)。訂單資料包含我們想要擷取為單獨值的電子郵件地址。

我們的要求：

* 特定網域中的電子郵件地址：`example.com`。

* 包含任意數量的字母數字字元以及一組定義的特殊字元的電子郵件地址。

載入指令碼

```
OrderDetails:

Load * Inline `
OrderJson
{"Orders":[{"order_id":"12345","customer":{"name":"John Doe","email":"john.doe@example.com"},"items":{"product":"Laptop","quantity":2,"price":1200},"total_price":2400},{"order_id":"12346","customer":{"name":"Jane Doe","email":"jane.doe@example.com"},"items":{"product":"Tablet","quantity":4,"price":400},"total_price":1600},{"order_id":"12347","customer":{"name":"Amalia Craig","email":"amalia.craig@example.com"},"items":{"product":"Desktop Computer","quantity":1,"price":1900},"total_price":1900},{"order_id":"12348","customer":{"name":"Ken Roberts","email":"ken.roberts@example.com"},"items":{"product":"Phone Charger Cable","quantity":110,"price":1900},"total_price":1210}]}
` (delimiter is '\t');
```

結果

載入資料並開啟工作表。建立表格並將下列每個運算式新增為計算維度：

* `=ExtractRegEx(OrderJson,'[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@example.com',1)`

* `=ExtractRegEx(OrderJson,'[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@example.com',2)`

* `=ExtractRegEx(OrderJson,'[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@example.com',3)`

* `=ExtractRegEx(OrderJson,'[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@example.com',4)`

結果表格

| =ExtractRegEx(OrderJson,'[a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']+@example.com',1) | =ExtractRegEx(OrderJson,'[a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']+@example.com',2) | =ExtractRegEx(OrderJson,'[a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']+@example.com',3) | =ExtractRegEx(OrderJson,'[a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']+@example.com',4) |
| --- | --- | --- | --- |
| john.doe@example.com | jane.doe@example.com | amalia.craig@example.com | ken.roberts@example.com |

## 瞭解更多資訊

* [在載入指令碼和圖表運算式中使用規則運算式](https://help.qlik.com/zh-TW/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/regular-expressions-qlik-analytics.htm)