问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在Alteryx中使用Regex Expression 正则表达式

发布网友 发布时间:2022-09-06 05:22

我来回答

1个回答

热心网友 时间:2024-11-24 17:20

文:Lucia

参考文献链接:

https://community.alteryx.com/t5/Alteryx-Knowledge-Base/Tool-Mastery-RegEx/ta-p/37689

【作者注:由于正则表达翻译的晦涩,这篇并不是完全逐字编译的文章,相当于结合原文案例和已有正则学习材料的基于自己表达的解说,特此说明】

——在Alteryx中使用Regex Expression 正则表达式

首先如果您不太了解正则表达式是什么的话,可以点击下面的30分钟快速入门正则表达式教程

 ▼                                                                                              ▼

https://www.runoob.com/w3cnote/regular-expression-30-minutes-tutorial.html

 ▲                                                                                             ▲

简而言之,正则表达式已经是独立的一门语言,早已嵌入很多的分析工具中,Alteryx也不例外,这种常用于文本挖掘的抽象语言,不必死记硬背,就好比工具箱里的各种螺丝——用得上能解决需求就是了。

Let‘s Start——>

 Alteryx用户可以在[Parse] 找到Regex 

对这个图标我们可以右键打开官方内置Example 【RegEx.yxmd】

下面是对Example里的设置进行的解读

1)Regex Match乃根据正则表达式指定的匹配规则返回是否匹配成功,即返回(True/False)

下图是在Address列中根据 *.-\d{4} 即指定匹配任意字符+”-“+任意四位数字规则的正则设置

2)Regex Parse乃根据正则表达式指定的匹配规则截取字段成为新列

下图是在Name列中根据([a-z]+)\s([a-z]+) 即指定匹配任意字母+空格+任意字母的正则表达,截取第一段为First Name ,截取第二段为Last Name

3)Regex Replace乃根据正则表达式指定的匹配规则把匹配的字符组按照自定义替换的规则进行替换

下图里是对Address栏里按照(.*), (.*), (.*)\s(\d{5})(-\d{4})?的规则(此处5个括号5个组)以$4:$2,$3为替换语言    去实现以第4组字符:第2组字符,第3组字符为内容的替换

4)Regex Tokenize是根据正则表达式指定的匹配规则当作分隔关键字进行分栏/分列

下图里是对Address栏里按照[^,]+ 的规则,即配不含”,”的任意字符各自成组(SET)切成3列

Alteryx本身也会有一些提示语法藏在点击Regular

Expression旁的倒三角里

此外Alteryx 的Formula中也有正则应用函数

REGEX_CountMatches(string,pattern,icase)

REGEX_Match(string,pattern,icase)

REGEX_Replace(string,pattern, replace,icase)

看了官方内置案例后我们还是回到Alteryx Community 的Tool Mastery系列看看那边的大侠怎么解说alteryx里的正则表达式吧

先上吐槽漫画,论写正则的*格

论写正则的过程

你可以视正则为另一门语言,它用符号的形式去匹配文本中一串字母字符数字,是一个对象型语言。

下面举个栗子

3345

Michelson Drive, Suite 400, Irvine, CA 92612

12303

Airport Way, Suite 250, Broomfield, CO 80021

Two

North Riverside Plaza, Suite 1430, Chicago, IL 60606

在这个国外的地址模式里,哪一块是街道门牌哪一块城市哪一块是邮编老外一眼便知,但是对于计算机来说这些都是一大段文字,中间有些空格或者分隔符,它不会在乎这段文字是不是具备地址的特征。而正则表达式是一种方式去让计算机和我们去识别这些有用信息,下面我们把这段文字翻译成正则表达吧!

3345                         ^ \d+         ^ 是正则里一行的开头,而 \d 代表任意数字(0-9) + 代表重复匹配1次以上,像是开头是数字的地址靠 ^ \d+ 就能匹配任意位数数字了 ,

Michelson Drive        [^ \d]+              非数字的匹配也就是数字的反义则是加 [^ ...] ,假设街道名不可能由数字构成,则直接加方括号[]行反义,即 [^ \d]+ 代表重复匹配1次以上任意非数字

Suite 400                  .*             由于不是每个地址里X单元是必需的,则 .* 代表可以匹配任意字符并重复 0 次以上

Irvine                          [^ \d]+            同前匹配任意位数非数字了 ,

CA                              \u{2}              \u   是匹配任意大写字母,花括号里则是代表匹配的字符长度, \u{2} 代表匹配 2 位大写字母

92612                         \d{5}$            \d{5}$ 是匹配5位数字 $ 代表匹配当前文本的末尾

 正则还是有很多符号组成的,所幸Alteryx还是提供了一些常见的“密码本“在REGEX工具的倒三角下拉框里

作为用户的您真的没有必要围着正则表达的条条框框,因为正则的确千变万化,在alteryx里你只需遵循写一个试一把的方式来摸索就是了

Alteryx提供了4种运用RegEx工具的方法:Match/Parse/Replace/Tokenize

下面上个不同于官方内置举例的较长正则来讲述alteryx里还会用到的正则语法

(?: ^ \d+)|(?:^\w+)\s[^\d]+,\s.*,\s[^\d]+,\s\u{2}\s\d{5}$

\s 是匹配单个空格

| 是代表or

(?: ^\d+ )是匹配但不捕获任意位数数字,不分配组号

(?: ^\w+ )是匹配但不捕获任意位数的字符汉字数字下划线,不分配组号

Match

Regex Match 根据正则表达式指定的匹配规则返回是否匹配成功,即返回(True/False)

像 (?:^\d+)|(?:^\w+)\s[^\d]+,\s.*,\s[^\d]+,\s\u{2}\s\d{5}$在第三行那个例子中能匹配为True就是靠(?:^\d+)|(?:^\w+)的写法,否则单纯靠(?:^\d+)的规则则会返回False,我们考虑一个好的正则的写法是有远见的精准而不是*死的错杀,像第三行的例子里的Two 和阿拉伯数字2这样,用or这样的运算符,它会先对前置的(?:^\d+)进行匹配,没匹配上再对后置的(?:^\w+)进行匹配

Parse

Regex Parse根据正则表达式指定的匹配规则截取字段成为新列

Replace

Regex Replace根据正则表达式指定的匹配规则把匹配的字符组按照自定义替换的规则进行替换

下图里是对Address栏里按照

1               2                 3             4            5                 6
((?:^\d+)|(?:^\w+))\s([^\d]+),\s.(*,)\s([^\d]+),\s(\u{2})\s(\d{5}$)的规则(此处6个一级括号亦代表6个组)以$4,$5为替换语言    去实现以第4组字符:第5组字符为内容的替换

 Regex Replace 的写法灵活,你也可以用Formula里的RegEx_Replace来实现效果

Tokenize

Regex Tokenize是根据正则表达式指定的匹配规则当作分隔关键字进行分栏/分列

Alteryx中本也有Text to column的工具,不过Regex Tokenize 与之相比灵活在可以匹配反义,或是匹配但不捕获的无视方法,来有选择写入需要的字符

下面与之前官方例子中的[^,]+ 规则相同但是用匹配不捕获的无视的写法

( .+? ) (?: , |$)

捕获任意位数字符但尽可能少重复,直到匹配到逗号或者文本末尾时放手无视

+? 是正则里的一种懒惰限定符(亲可以点文章开头的30分钟入门,去看贪婪和懒惰部分)

 当然也有因为写了?重复匹配0次或1次而没出现分隔效果的情况如上图
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
找专业防水队做完还漏水怎么维权 法院会受理房屋漏水造成的纠纷吗? 巴西龟最长活多久,家养!!! 养胃的药最好的是什么啊 婴儿积食发烧不愿吃药怎么办 板门穴位在哪个部位 手机设置放偷看的方法? 凝结水回收器生产厂家? 个人账户养老金预测公式:现有5万元,缴费20年,能领多少钱? 临沂比较有名的男装品牌 空洞孔可以用发泡胶密封吗? 发泡胶打到封闭容器可以发泡吗? 遗产管理人应当履行什么职责 《山海情》马得福原型人物是谁? 遗产管理人什么依照法律规定或者按照约定获得报酬 遗产管理人依照法律规定或者按照约定获得报酬 淘宝网登得进,为什么买东西用密码又错?为什么 ...买东西 他说支付密码明明就是银行卡密码 为什么他还说密码错误... 遗产管理人是否有权利获得报酬 遗产管理人可以获得报酬吗 qq空间怎么打不开了?一打开就说:浏览器不支持q-zone某特性 如何才能注册新? 命运就算颠沛流离,命运就算曲折离奇,,,歌词,这是什么歌?求歌名 请问这种长的很像君子兰的植物是什么?有图片 九月九日的传说,水母娘娘的来历 水母娘娘 注册一个新的怎么注册 长得像 君子兰的 叶子一样的 花卉 叫什么名字 跟君子兰叶子相似不开花是什么植物 怎样申请新? 依据民法典的规定,遗产管理人应当履行什么职责? I saw our math teacher at the head of the (填队列)? 分别复述《家》中五个主要人物的主要情节及其反映的性格 梦见个周围金光闪闪娃娃 梦见金光闪闪的男孩握手 梦见金光闪闪给我送来了孩子 梦见生了个孩子身上金光闪闪的求解 梦见一个小孩金光闪闪的在我面前 怀儿子时,梦见一个金光闪闪小人进我肚子? 现在龙亭万寿观敬的是真五大帝像吗 龙亭是那个皇帝登记过 开封龙亭的简介 高一军训心得 高一军训第一天心得体会 3040的虾多大厘米 蒲公英泡水喝的副作用? 香菇瘦肉蛋黄能不能一起煮粥? 香菇鸡肉粥能放鸡蛋吗? 香菇,生菜,皮蛋,鸡蛋,瘦肉能一起煲稀饭吗 凸透镜和凹透镜各有什么特点