# ReplaceRegEx 指令碼與圖表函數

ReplaceRegEx() 會在取代輸入字串與指定規則運算式模式之間的一或多個相符項後傳回一個字串。取代相符文字的文字在 to\_str 引數中指定。該函數從左至右運作，但如果指定負 occurrence 值，則函數從右至左讀取。

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

[ReplaceRegEx - Script syntax and chart functions](https://play.vidyard.com/1STBZFJeqoouP4SSofdb5R)

語法：

ReplaceRegEx (text, regex, to\_str [, occurrence])

傳回的資料類型： 字串

引數

| 引數 | 描述 |
| --- | --- |
| text | 您想要用 to\_str 中的新文字全部或部分取代的輸入字串文字。 |
| regex | 定義何時取代文字的規則運算式。將取代此引數和 text 引數之間的相符項。 |
| to\_str | 您想要用來取代 text 中現有內容的新文字。 |
| occurrence | 要取代為新文字的相符項 (輸入文字和規則表達式之間) 數量。<br><br>此為選用引數。如果省略，預設值為 0。當使用值 0 或省略引數時，text 和 regex 之間的所有相符項都會取代為 to\_str。<br><br>您可以為 occurrence 指定負值以從右到左識別相符項。 |

函數範例

| 範例 | 結果 |
| --- | --- |
| `ReplaceRegEx('abc123','[0-9]','x')` | 傳回 `abcxxx`。在此範例中，輸入字串中與 Regex 模式相符的所有文字都會取代為新文字。 |
| `ReplaceRegEx('abc123','[0-9]','x',1)` | 傳回 `abcx23`。僅取代輸入字串和 Regex 模式之間第一次出現的相符項。 |
| `ReplaceRegEx('abc123','[0-9]','x',4)` | 傳回 `abc123`。輸入字串和 Regex 模式之間只有三種可能的相符項，因此不執行任何修改。 |
| `ReplaceRegEx('ABC123','[a-c]','5')` | 傳回 `ABC123`。不執行任何修改，因為 ReplaceRegEx() 區分大小寫，且未使用不區分大小寫的變體。 |
| `ReplaceRegExI('ABC123','[a-c]','5')` | 傳回 `555123`。使用不區分大小寫的函數變體 ReplaceRegExI()。 |

## 何時使用 ReplaceRegEx

您可以使用 ReplaceRegEx() 修改文字以滿足格式和合規性標準，尤其是當資料中存在複雜模式時。例如，您可以對電話號碼字串進行重新格式設定，以便僅包含數字值。

如果需要，您還可以使用此函數來遮罩敏感資訊，例如個人識別資訊 (PII)，以便分析應用程式的使用者不會看到這些資訊。

## 範例 1 – 用於更新員工電子郵件地址的載入指令碼

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

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

概述

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

載入指令碼包含：

* 包含組織員工電子郵件地址的表格 `Employees`。

* 建立新欄位 `Email_Updated`，以對欄位 `Email_Original` 中的值執行尋找並取代操作。

公司變更其名稱後，所有電子郵件地址已更新以反映新名稱。

我們的要求：

* 將 `test.com` 的所有網域參照轉換為 `newcompanyname.com`。

* 我們需要使用不區分大小寫的 Regex 操作。

載入指令碼

```
Employees:

Load 
ReplaceRegExI(Email_Original, '@[a-zA-Z0-9.-]*\.?test\.com', '@newcompanyname.com') as Email_Updated,
* Inline [
ID, Email_Original
1, john_doe@test.com
2, jane_doe@test.com
3, Michael_Andrews@test.com
4, charlie_kent@test.com
5, frances_johnson@test.com
6, rebecca_smith@test.com
];
```

結果

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

* `ID`

* `Email_Original`

* `Email_Updated`

結果表格

| ID | Email\_Original | Email\_Updated |
| --- | --- | --- |
| 1 | john\_doe@test.com | john\_doe@newcompanyname.com |
| 2 | jane\_doe@test.com | jane\_doe@newcompanyname.com |
| 3 | Michael\_Andrews@test.com | Michael\_Andrews@newcompanyname.com |
| 4 | charlie\_kent@support.test.com | charlie\_kent@newcompanyname.com |
| 5 | frances\_johnson@test.com | frances\_johnson@newcompanyname.com |
| 6 | rebecca\_smith@hr.test.com | rebecca\_smith@newcompanyname.com |

## 範例 2 – 用於對 ISBN 代碼進行格式設定的載入指令碼

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

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

概述

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

載入指令碼包含：

* 變數 `ISBN_13` 和 `ISBN_10`，分別儲存用於 13 位和 10 位 ISBN 字串模式的規則運算式。

* 包含 ISBN 書籍代碼之原始數值的表格 `Employees`。此表格包含 13 位和 10 位 ISBN。

* 執行幾項操作來擷取 ISBN 的每個部分，然後傳回一個字串，以標準的預期格式顯示整個代碼。我們使用 ReplaceRegEx()、MatchRegEx()、ExtractRegExGroup() 和 Pick() 的組合。

我們的要求：

* 我們希望使用標準化格式將數字格式化為更易讀的文字：

  * ISBN ###-#-####-####-#

  * ISBN #-###-#####-#

載入指令碼

```
Set ISBN_13 = '^([0-9]{3})([0-9]{1})([0-9]{4})([0-9]{4})([0-9]{1})$';
Set ISBN_10 = '^([0-9]{1})([0-9]{3})([0-9]{5})([0-9]{1})$';

Formatted_Codes:

Load
Pick(MatchRegEx(ISBN_Unformatted, '$(ISBN_13)', '$(ISBN_10)'), ReplaceRegEx(ISBN_Unformatted, '$(ISBN_13)', 'ISBN ' & ISBN_Component1 & '-' & ISBN_Component2 & '-' & ISBN_Component3 & '-' & ISBN_Component4 & '-' & ISBN_Component5), ReplaceRegEx(ISBN_Unformatted, '$(ISBN_10)', 'ISBN ' & ISBN_Component1 & '-' & ISBN_Component2 & '-' & ISBN_Component3 & '-' & ISBN_Component4)) as ISBN_Formatted;

Load *,
Pick(MatchRegEx(ISBN_Unformatted, '$(ISBN_10)', '$(ISBN_13)'), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_10)', 1, 1), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_13)', 1, 1)) as ISBN_Component1,
Pick(MatchRegEx(ISBN_Unformatted, '$(ISBN_10)', '$(ISBN_13)'), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_10)', 2, 1), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_13)', 2, 1)) as ISBN_Component2,
Pick(MatchRegEx(ISBN_Unformatted, '$(ISBN_10)', '$(ISBN_13)'), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_10)', 3, 1), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_13)', 3, 1)) as ISBN_Component3,
Pick(MatchRegEx(ISBN_Unformatted, '$(ISBN_10)', '$(ISBN_13)'), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_10)', 4, 1), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_13)', 4, 1)) as ISBN_Component4,
Pick(MatchRegEx(ISBN_Unformatted, '$(ISBN_10)', '$(ISBN_13)'), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_10)', 5, 1), ExtractRegExGroup(ISBN_Unformatted, '$(ISBN_13)', 5, 1)) as ISBN_Component5
inline `
ISBN_Unformatted
1233123412340
0122012301234
0001012301232
0111234567
5552555555553
2224222222222
1901234568
3333333333333
5551515151513
2321232323231
2444444444
8880999900000
`;
```

結果

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

* `ISBN_Formatted`

結果表格

| ISBN\_Formatted |
| --- |
| ISBN 000-1-0123-0123-2 |
| ISBN 0-111-23456-7 |
| ISBN 1-901-23456-8 |
| ISBN 2-444-44444-4 |
| ISBN 012-2-0123-0123-4 |
| ISBN 123-3-1234-1234-0 |
| ISBN 222-4-2222-2222-2 |
| ISBN 232-1-2323-2323-1 |
| ISBN 333-3-3333-3333-3 |
| ISBN 555-1-5151-5151-3 |
| ISBN 555-2-5555-5555-3 |
| ISBN 888-0-9999-0000-0 |

## 範例 3 – 用於更新次要電子郵件地址的圖表運算式

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

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

概述

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

載入指令碼包含：

* 包含組織員工電子郵件地址的表格 `Employees`。這些資訊儲存在每個員工的單一字串中，其中儲存了多個電子郵件地址。

我們的要求：

* 需要更新次要電子郵件地址，使其使用網域 `newcompanyname.com`。我們不想更新任何主要電子郵件地址。

* 我們需要使用不區分大小寫的 Regex 操作。

載入指令碼

```
Employees:

Load * Inline [
ID, Emails
1, Primary: john_doe@test.com Secondary: john_michael_doe@example.com
2, Primary: jane_doe@test.com Secondary: jane_tabitha_doe_doe@example.com
3, Primary: Michael_Andrews@test.com Secondary: Michael_John_Andrews@example.com
4, Primary: charlie_kent@test.com Secondary: charlie_peter_kent@example.com
5, Primary: frances_johnson@test.com Secondary: frances_johnson@example.com
6, Primary: rebecca_smith@test.com Secondary: rebecca_danielle_smith@example.com
];
```

結果

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

* `ID`

* `Emails`

新增下列計算維度：

```
=ReplaceRegExI(Emails,'@[a-zA-Z0-9.-]*\.?[a-zA-Z0-9]*\.com','@newcompanyname.com',2)
```

結果表格

| ID | Emails | =ReplaceRegExI(Emails,'@[a-zA-Z0-9.-]\*\.?example\.com','@newcompanyname.com',2) |
| --- | --- | --- |
| 1 | Primary: john\_doe@test.com Secondary: john\_michael\_doe@example.com | Primary: john\_doe@test.com Secondary: john\_michael\_doe@newcompanyname.com |
| 2 | Primary: jane\_doe@test.com Secondary: jane\_tabitha\_doe\_doe@example.com | Primary: jane\_doe@test.com Secondary: jane\_tabitha\_doe\_doe@newcompanyname.com |
| 3 | Primary: Michael\_Andrews@test.com Secondary: Michael\_John\_Andrews@example.com | Primary: Michael\_Andrews@test.com Secondary: Michael\_John\_Andrews@newcompanyname.com |
| 4 | Primary: charlie\_kent@test.com Secondary: charlie\_peter\_kent@example.com | Primary: charlie\_kent@test.com Secondary: charlie\_peter\_kent@newcompanyname.com.com |
| 5 | Primary: frances\_johnson@test.com Secondary: frances\_johnson@example.com | Primary: frances\_johnson@test.com Secondary: frances\_johnson@newcompanyname.com |
| 6 | Primary: rebecca\_smith@test.com Secondary: rebecca\_danielle\_smith@example.com | Primary: rebecca\_smith@test.com Secondary: rebecca\_danielle\_smith@newcompanyname.com |

透過為 occurrence 引數指定值 2，我們將只會更新與 Regex 模式相符的第二個執行個體。

## 瞭解更多資訊

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