在Alteryx中使用Regex Expression 正則表達式

文:Lucia

參考文獻鏈接:

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

【作者注:由于正則表達翻譯的晦澀,這篇并不是完全逐字編譯的文章刚夺,相當于結(jié)合原文案例和已有正則學習材料的基于自己表達的解說诫惭,特此說明】

——在Alteryx中使用Regex Expression 正則表達式

首先如果您不太了解正則表達式是什么的話焙蚓,可以點擊下面的30分鐘快速入門正則表達式教程

?▼??????????????????????????????????????????????????????????????????????????????????????????????▼

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

?▲?????????????????????????????????????????????????????????????????????????????????????????????▲

簡而言之,正則表達式已經(jīng)是獨立的一門語言,早已嵌入很多的分析工具中,Alteryx也不例外,這種常用于文本挖掘的抽象語言鸣驱,不必死記硬背,就好比工具箱里的各種螺絲——用得上能解決需求就是了蝠咆。

Let‘s Start——>

?Alteryx用戶可以在[Parse] 找到Regex?


對這個圖標我們可以右鍵打開官方內(nèi)置Example 【RegEx.yxmd】

下面是對Example里的設(shè)置進行的解讀

1)Regex Match乃根據(jù)正則表達式指定的匹配規(guī)則返回是否匹配成功踊东,即返回(True/False)

下圖是在Address列中根據(jù) *.-\d{4} 即指定匹配任意字符+”-“+任意四位數(shù)字規(guī)則的正則設(shè)置


2)Regex?Parse乃根據(jù)正則表達式指定的匹配規(guī)則截取字段成為新列

下圖是在Name列中根據(jù)([a-z]+)\s([a-z]+) 即指定匹配任意字母+空格+任意字母的正則表達,截取第一段為First Name 刚操,截取第二段為Last Name


3)Regex?Replace乃根據(jù)正則表達式指定的匹配規(guī)則把匹配的字符組按照自定義替換的規(guī)則進行替換

下圖里是對Address欄里按照(.*), (.*), (.*)\s(\d{5})(-\d{4})?的規(guī)則(此處5個括號5個組)以$4:$2,$3為替換語言??? 去實現(xiàn)以第4組字符:第2組字符闸翅,第3組字符為內(nèi)容的替換


4)Regex?Tokenize是根據(jù)正則表達式指定的匹配規(guī)則當作分隔關(guān)鍵字進行分欄/分列

下圖里是對Address欄里按照[^,]+ 的規(guī)則,即配不含”,”的任意字符各自成組(SET)切成3列


Alteryx本身也會有一些提示語法藏在點擊Regular

Expression旁的倒三角里


此外Alteryx 的Formula中也有正則應用函數(shù)

REGEX_CountMatches(string,pattern,icase)

REGEX_Match(string,pattern,icase)

REGEX_Replace(string,pattern, replace,icase)


看了官方內(nèi)置案例后我們還是回到Alteryx Community 的Tool Mastery系列看看那邊的大俠怎么解說alteryx里的正則表達式吧

先上吐槽漫畫赡茸,論寫正則的逼格


論寫正則的過程


你可以視正則為另一門語言缎脾,它用符號的形式去匹配文本中一串字母字符數(shù)字,是一個對象型語言占卧。

下面舉個栗子

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

在這個國外的地址模式里遗菠,哪一塊是街道門牌哪一塊城市哪一塊是郵編老外一眼便知联喘,但是對于計算機來說這些都是一大段文字,中間有些空格或者分隔符辙纬,它不會在乎這段文字是不是具備地址的特征豁遭。而正則表達式是一種方式去讓計算機和我們?nèi)プR別這些有用信息,下面我們把這段文字翻譯成正則表達吧贺拣!

3345??? ? ? ? ? ? ? ? ? ? ?? ^\d+??????? ^是正則里一行的開頭蓖谢,而\d代表任意數(shù)字(0-9)+代表重復匹配1次以上,像是開頭是數(shù)字的地址靠^\d+就能匹配任意位數(shù)數(shù)字了譬涡,

Michelson Drive??????? [^\d]+???????????? 非數(shù)字的匹配也就是數(shù)字的反義則是加[^...],假設(shè)街道名不可能由數(shù)字構(gòu)成闪幽,則直接加方括號[]行反義,即[^\d]+代表重復匹配1次以上任意非數(shù)字

Suite 400????????????????? .*??????????? 由于不是每個地址里X單元是必需的涡匀,則.* 代表可以匹配任意字符并重復0次以上

Irvine????????????????????????? [^\d]+??????????? 同前匹配任意位數(shù)非數(shù)字了盯腌,

CA???????????????????????????? \u{2}????????????? \u? 是匹配任意大寫字母,花括號里則是代表匹配的字符長度陨瘩,\u{2}代表匹配2位大寫字母

92612??????????????????????? \d{5}$??????????? \d{5}$是匹配5位數(shù)字$代表匹配當前文本的末尾

?正則還是有很多符號組成的腕够,所幸Alteryx還是提供了一些常見的“密碼本“在REGEX工具的倒三角下拉框里


作為用戶的您真的沒有必要圍著正則表達的條條框框,因為正則的確千變?nèi)f化舌劳,在alteryx里你只需遵循寫一個試一把的方式來摸索就是了

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

下面上個不同于官方內(nèi)置舉例的較長正則來講述alteryx里還會用到的正則語法

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

\s 是匹配單個空格

| 是代表or

(帚湘?: ^\d+)是匹配但不捕獲任意位數(shù)數(shù)字,不分配組號

(甚淡?: ^\w+)是匹配但不捕獲任意位數(shù)的字符漢字數(shù)字下劃線大诸,不分配組號

Match

Regex Match 根據(jù)正則表達式指定的匹配規(guī)則返回是否匹配成功,即返回(True/False)


像?(?:^\d+)|(?:^\w+)\s[^\d]+,\s.*,\s[^\d]+,\s\u{2}\s\d{5}$在第三行那個例子中能匹配為True就是靠(?:^\d+)|(?:^\w+)的寫法材诽,否則單純靠(?:^\d+)的規(guī)則則會返回False,我們考慮一個好的正則的寫法是有遠見的精準而不是限制死的錯殺底挫,像第三行的例子里的Two 和阿拉伯數(shù)字2這樣,用or這樣的運算符脸侥,它會先對前置的(?:^\d+)進行匹配,沒匹配上再對后置的(?:^\w+)進行匹配

Parse

Regex?Parse根據(jù)正則表達式指定的匹配規(guī)則截取字段成為新列


Replace

Regex?Replace根據(jù)正則表達式指定的匹配規(guī)則把匹配的字符組按照自定義替換的規(guī)則進行替換

下圖里是對Address欄里按照


1?????????????? 2???????????????? 3???????????? 4??????????? 5???????????????? 6
((?:^\d+)|(?:^\w+))\s([^\d]+),\s.(*,)\s([^\d]+),\s(\u{2})\s(\d{5}$)的規(guī)則(此處6個一級括號亦代表6個組)以$4,$5為替換語言??? 去實現(xiàn)以第4組字符:第5組字符為內(nèi)容的替換

?Regex Replace 的寫法靈活盈厘,你也可以用Formula里的RegEx_Replace來實現(xiàn)效果

Tokenize

Regex?Tokenize是根據(jù)正則表達式指定的匹配規(guī)則當作分隔關(guān)鍵字進行分欄/分列

Alteryx中本也有Text to column的工具睁枕,不過Regex Tokenize 與之相比靈活在可以匹配反義,或是匹配但不捕獲的無視方法沸手,來有選擇寫入需要的字符

下面與之前官方例子中的[^,]+ 規(guī)則相同但是用匹配不捕獲的無視的寫法

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

捕獲任意位數(shù)字符但盡可能少重復外遇,直到匹配到逗號或者文本末尾時放手無視

+?是正則里的一種懶惰限定符(親可以點文章開頭的30分鐘入門,去看貪婪和懶惰部分)

?當然也有因為寫了契吉?重復匹配0次或1次而沒出現(xiàn)分隔效果的情況如上圖

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末跳仿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子捐晶,更是在濱河造成了極大的恐慌菲语,老刑警劉巖妄辩,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異山上,居然都是意外死亡眼耀,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門佩憾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哮伟,“玉大人,你說我怎么就攤上這事妄帘±慊疲” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵抡驼,是天一觀的道長谅辣。 經(jīng)常有香客問我,道長婶恼,這世上最難降的妖魔是什么桑阶? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮勾邦,結(jié)果婚禮上蚣录,老公的妹妹穿的比我還像新娘。我一直安慰自己眷篇,他們只是感情好萎河,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蕉饼,像睡著了一般虐杯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上昧港,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天擎椰,我揣著相機與錄音,去河邊找鬼创肥。 笑死达舒,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的叹侄。 我是一名探鬼主播巩搏,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼趾代!你這毒婦竟也來了贯底?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤撒强,失蹤者是張志新(化名)和其女友劉穎禽捆,沒想到半個月后笙什,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡睦擂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年得湘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片顿仇。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡淘正,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出臼闻,到底是詐尸還是另有隱情鸿吆,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布述呐,位于F島的核電站惩淳,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏乓搬。R本人自食惡果不足惜思犁,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望进肯。 院中可真熱鬧激蹲,春花似錦、人聲如沸江掩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽环形。三九已至策泣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間抬吟,已是汗流浹背萨咕。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拗军,地道東北人任洞。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像发侵,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子妆偏,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容