正则表达式工具
单个工具示例
“正则表达式”有一个单个工具示例。转至 示例工作流 以了解如何在 Alteryx Designer 中访问此示例和其他更多示例。
可运用“正则表达式”来使用正则表达式语法进行解析、匹配或替换数据。
正则表达式支持
虽然 Designer 支持正则表达式,但用户需要自行构建表达式,表达式对数据产生的影响也由用户进行掌控。
如需参考如何编写正则表达式的更多资料,请访问 https://regex101.com/ (此网站与 Alteryx 无关联),也可以使用 RegEx Coach ,这是一款由独立第三方开发的 Windows 版图形应用程序,供您交互地试验与 Perl 兼容的正则表达式。
如需详细了解 Boost RegEx,请参考以下资料:
配置工具
选择 解析的列 。
在 转换的格式 中...
输入 正则表达式 。使用“+”按钮访问创建表达式时常用的各种正则表达式。访问 Perl 正则表达式语法 网站了解更多信息。
不区分大小写 :默认处于选中状态。搜索不区分大小写字母。
在 输出 中,选择解析时要使用的 输出方法 。然后配置相关 属性 。
替换 :用第二个表达式替换所搜索的表达式。
替换文本 :输入一个表达式,指定替换原始的正则表达式的标记组。使用“+”按钮访问创建表达式时常用的各种正则表达式。
将不匹配的文本复制到输出
令牌化 :使用正则表达式拆分传入数据。此选项的工作方式与 文本转换到列工具 相似;不同之处在于,此选项匹配的是您想要保留的项,而不是通过匹配移除不需要的项。工具匹配的是整个令牌,如果令牌中有标记组,则工具仅返回标记组部分。前往下方的 令牌化方法示例 。
拆分为列 :在每个指定分隔符处拆分数据,从而将一列数据拆分为多列。
列数 :设置要创建的列数。
多余列 :指定处理多余列的方式。
放弃多余列,发出警告 :超出拆分数目的数据将被删除,且显示一条警告,指示存在多余信息。
放弃多余项,不发出警告 :超出拆分数目的数据将被删除,且不显示任何警告。
错误 :超出拆分数目的数据会导致错误,工作流将停止处理。
输出根名称 :输入新生成的列应依据的名称。新列名称将以根名称加一个递增整数的形式出现。
拆分为行 :在每个指定分隔符处拆分数据,从而将一列数据拆分为多行。在记录中使用主键列,这样便于跟踪值来自哪一行。
解析 :将表达式划分为多个新列,并设置新列的 名称 、 类型 和 大小 。解析方式将在 输出列 表中创建一个新列,新列包含:
名称 :选择列名称即可输入新名称。
类型 :使用下拉列表选择新的数据类型。
大小 :选择数据大小以输入新的大小。
表达式 :自动填充。
匹配 :如果表达式匹配,则附加一个包含数字 1 的列;如果不匹配,则附加一个包含数字 0 的列。
匹配结果列的列名 :指定所附加列的名称。
不匹配时报错 :选择此选项可在表达式与字符串不匹配时生成错误,以结束工作流处理。
令牌化方法示例
这些使用案例利用了正则表达式工具的令牌化方式。
将包含 9 个字符的字符串 123456789 解析为 3 个字段。正则表达式为
...
。将包含 9 个字符的字符串解析为 3 个字段,且仅返回第二个字符。正则表达式为
.(.).
。使用分隔符 Ctrl-A 解析字符 。 要对以 Ctrl-A 分隔的字符串进行令牌化,可应用的正则表达式是
[^\cA]+
。[^...]
括号表示与字符集中的单个字符获得匹配。若集使用^
开头,此正则表达式将变成匹配该字符集中不存在的任何字符。\cA
这表示仅与 Ctrl-A 字符匹配。+
这表示匹配 1 个或多个上一匹配项。
允许使用空白令牌以保留条目: abc, ,def 。 正则表达式为
([^,]*)(?:,|$)
。(...)
括号用于创建表达式的标记组。令牌化模式允许您匹配输入字段的更多部分,但只返回标记部分的匹配项。这样就可以避免返回分隔符。表达式中只能有一个标记组。[^,]
若集使用^
开头,此正则表达式就变成匹配该字符集中不存在的任何字符,本例的 , 。*
匹配 0 个或 0 个以上的上一匹配项,允许空集。但不建议以这个字符结束表达式。RegEx 引擎并不喜欢 0 字符匹配,因为这会造成无限匹配项,所以我们必须指定能终止匹配操作的项。(?:....)
这是一个未标记组。在执行 or 运算(通过|
表示)时,我们需要此表达式。|
这表示匹配运算符之前或之后的项,而不是两者同时匹配。这几乎总是需要与标记组或未标记组配合使用。$
匹配字符串末尾。因此(?:,|$)
会最多匹配一个 , 或字符串末尾。
解析主页中的 HTML 链接。正则表达式为
<a .*?>.*?</a>
。这会将大型 HTML 文档中的每个链接提取出来,并形成一系列记录。<a
表示通过字面方式匹配文本 <a。.*?.
表示任意字符,*
表示 0 个或 0 个以上。?
修改了*
,以使其匹配可能的最短匹配项。如果不使用这个符号,表达式可能会找到一个从第一个链接开头到最后一个链接末尾的令牌。>
这是对 > 文本的字面匹配。.*?
满足整个正则表达式条件的任何字符的最短匹配项。</a>
表示通过字面方式匹配文本 </a> 。这将结束匹配操作。