Skip to main content

正则表达式工具

可运用正则表达式工具通过正则表达式语法进行数据解析、匹配或替换。

提示

此工具具有单个工具示例。查看访问示例工作流以了解如何在 Designer Cloud 中访问此示例和其他更多示例。

正则表达式支持

尽管 Designer Cloud 支持正则表达式,但用户需对自己的表达式以及这些表达式对数据的影响负责。

如需获取如何编写正则表达式的更多资源,请访问 https://regex101.com/(此网站与 Alteryx 无关联),也可以使用 RegEx Coach,这是一款由独立第三方开发的 Windows 版图形应用程序,供您交互地试验与 Perl 兼容的正则表达式。

如需了解 Boost RegEx 的更多信息,请参阅以下资料:

配置工具

  1. 选择要解析的列

  2. 输入正则表达式。使用加号按钮查看常见的正则表达式。访问 Perl 正则表达式语法网站了解更多信息。

    • 选中区分大小写以使搜索区分大写和小写字母。

  3. 选择解析时要使用的输出方法,然后配置相关属性。

    • 匹配:如果表达式匹配,则附加一个包含数字 1 的列;如果不匹配,则附加一个包含数字 0 的列。

      • 匹配状态列的列名称:提供所附加列的名称。

    • 解析:将表达式划分为多个新列,并设置新列的名称类型。将使用以下参数在输出列表中创建一个新列:

      • 名称:选择列名称即可输入新名称。

      • 类型:使用下拉列表选择新的数据类型。

      • 表达式:自动填充。

    • 替换:用第 2 个表达式替换所搜索的表达式。

      • 替换为:输入一个表达式,指定替换原始的正则表达式的标记组。使用加号按钮查看常见的正则表达式。

      • 选中将不匹配的文本复制到输出以将不匹配的文本复制到输出。

    • 令牌化:使用正则表达式拆分传入数据。此选项的工作原理与文本转换到列工具类似,区别在于它是匹配要保留的内容,而非匹配并删除不需要保留的内容。工具匹配的是整个令牌,如果令牌中有标记组,则工具仅返回标记组部分。前往下方的标记化方法示例。

      • 拆分为列:在每个指定分隔符处拆分数据,从而将一列数据拆分为多列。

        • 输出列的数量:设置要创建的列数。

        • 输出列标题:输入新生成的列应依据的名称。新列名称将以根名称加一个递增整数的形式出现。

        • 如果输出中有额外的列:选择应用于额外列的行为。

          • 不包含:超出拆分数目的数据将被删除,并且不会出现任何警告。

          • 不包含并显示警告:超出拆分数目的数据将被删除,并且出现一条警告,指示存在额外信息。

          • 错误(停止处理记录):超出拆分数目的数据会导致错误,并停止工作流处理。

      • 拆分为行:在每个指定分隔符处拆分数据,从而将一列数据拆分为多行。在记录中使用主键列,这样便于跟踪值来自哪一行。

令牌化方法示例

这些使用案例利用了正则表达式工具的标记方法。

  • 将包含 9 个字符的字符串 123456789 解析为 3 个字段。正则表达式为 ...

  • 将包含 9 个字符的字符串解析为 3 个字段,且仅返回第 2 个字符。正则表达式为 .(.).

  • 使用分隔符 Ctrl-A 解析字段要对使用 Ctrl-A 分隔的字符串进行标记化,可应用的正则表达式是 [^\cA]+

    • [^...] 括号表示与字符集中的单个字符获得匹配。若集使用 ^ 开头,此正则表达式将变成匹配该字符集中不存在的任何字符。

    • \cA 这仅表示与 Ctrl-A 字符匹配。

    • + 这表示匹配 1 个或多个上一匹配项。

  • 允许使用空白标记来保留条目:abc, ,def正则表达式为 ([^,]*)(?:,|$)

    • (...) 括号用于创建表达式的标记组。标记化模式允许您匹配输入字段的较大部分,但只返回已标记的子集。这样就可以避免返回分隔符。您只能具有 1 个标记表达式。

    • [^,] 若集使用 ^ 开头,此正则表达式就变成匹配该字符集中不存在的任何字符,本例的 ,

    • * 匹配 0 个或 0 个以上的上一匹配项,允许空集。但不建议以这个字符结束表达式。正则表达式引擎并不喜欢 0 个字符的匹配,因为这会造成无限匹配项,所以我们必须以另一种方式终止匹配。

    • (?:....) 是一个未标记组。在执行 or 运算(通过 | 表示)时,我们需要该表达式。

    • | 匹配之前或之后的内容,但不能同时匹配两者。这几乎总是需要与标记组或未标记组配合使用。

    • $ 匹配字符串末尾。例如 (?:,|$) 会最多匹配一个 , 或字符串末尾。

  • 解析主页中的 HTML 链接。正则表达式为 <a .*?>.*?</a>。这会将大型 HTML 文档中的每个链接提取出来,并形成一系列行。

    • <a 表示通过字面方式匹配文本“<a”。

    • .*?.表示任意字符,* 表示 0 个或 0 个以上。? 修改了 *,以使其匹配可能的最短匹配项。如果不使用该符号,表达式可能会找到一个从第一个链接开头到最后一个链接末尾的标记。

    • > 这是对文本“>”的字面匹配。

    • .*? 满足整个正则表达式条件的任何字符的最短匹配项。

    • </a> 表示通过字面方式匹配文本“</a>”。这将结束匹配。