# ReplaceRegEx - 脚本和图表功能

ReplaceRegEx() 在替换输入字符串和指定正则表达式模式之间的一个或多个匹配后，返回一个字符串。取代匹配文本的文本在 to\_str 参数中指定。函数从左到右运行，但如果指定一个负 occurrence 值，函数将从右到左读取。

该函数执行大小写敏感的正则表达式操作。您也可以用变种 ReplaceRegExI() 来作为替代，执行不区分大小写的正则表达式操作。

[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`。在此示例中，输入字符串中与正则表达式模式匹配的所有文本都会被新文本替换。 |
| `ReplaceRegEx('abc123','[0-9]','x',1)` | 返回 `abcx23`。只替换输入字符串和正则表达式模式之间首次出现的匹配项。 |
| `ReplaceRegEx('abc123','[0-9]','x',4)` | 返回 `abc123`。输入字符串和正则表达式模式之间只有三种可能的匹配，因此不会进行修改。 |
| `ReplaceRegEx('ABC123','[a-c]','5')` | 返回 `ABC123`。由于 ReplaceRegEx() 区分大小写，不使用区分大小写的变体，因此不进行修改。 |
| `ReplaceRegExI('ABC123','[a-c]','5')` | 返回 `555123`。使用不区分大小写的函数变体，ReplaceRegExI()。 |

## 适合使用它的情况

您可以使用 ReplaceRegEx() 对文本进行修改，以符合格式样式和合规标准，尤其是当数据中存在复杂样式时。例如，您可以重新格式化电话号码字符串，使其只包含数值。

如有需要，您还可以使用此函数屏蔽敏感信息，如个人身份信息 (PII)，使其不会显示给分析您应用程序的用户。

## 例 1 - 更新员工电子邮件地址的加载脚本

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

#### 加载脚本和结果

概述

打开数据加载编辑器，并将下面的加载脚本添加到新部分。

加载脚本包含：

* `Employees` 表格，其中包含某组织员工的电子邮件地址。

* 创建新字段 `Email_Updated`，对 `Email_Original` 字段中的值执行查找和替换操作。

公司更名后，所有电子邮件地址都已更新，以反映新名称。

我们的要求：

* 将 `test.com` 的所有域引用转换为 `newcompanyname.com`。

* 我们需要使用不区分大小写的正则表达式操作。

加载脚本

```
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/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/ReplaceRegEx.htm)

#### 加载脚本和结果

概述

打开数据加载编辑器，并将下面的加载脚本添加到新部分。

加载脚本包含：

* 变量 `ISBN_13` 和 `ISBN_10`，分别存储用于 13 位和 10 位 ISBN 字符串模式的正则表达式。

* 一个包含 ISBN 图书代码原始数值的表格 `Employees`。该表包含 13 位和 10 位国际标准书号。

* 通过多次操作提取 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/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/ReplaceRegEx.htm)

#### 图表表达式和结果

概述

打开数据加载编辑器，并将下面的加载脚本添加到新部分。

加载脚本包含：

* `Employees` 表格，其中包含某组织员工的电子邮件地址。这些信息存储在每个员工的单个字符串中，其中存储了多个电子邮件地址。

我们的要求：

* 二级电子邮件地址需要更新，以使用域名 `newcompanyname.com`。我们不想更新任何主要电子邮件地址。

* 我们需要使用不区分大小写的正则表达式操作。

加载脚本

```
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 的值，我们只能更新与正则表达式模式匹配的第二个实例。

## 了解详情

* [在加载脚本和图表表达式中使用正则表达式](https://help.qlik.com/zh-CN/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/regular-expressions-qlik-analytics.htm)