終於進入雙位數了我好感動,每日日更不存稿,讓我下定決心,以後要做這種奇奇怪怪的挑戰前,千萬要深思熟慮好好存稿,不然每天的內容都讓自己想哭
好啦那還是來進入正題吧!
講到字串,不可避免的就是大名鼎鼎的正規表示式啦,今天既是要帶大家利用正規表示式的方式來更有效率的切出(或是移除)那些字串啦
一個正規表示式通常被稱為一個模式(pattern),為用來描述或者符合一系列符合某個句法規則的字串。例如:Handel、Händel和Haendel這三個字串,都可以由H(a|ä|ae)ndel這個模式來描述。
維基百科:正則表示式
其實他就是一個可以拿來描述符合某種規則的字串,通常可以拿來做文字的萃取,搜尋等等,最常見的應用是在網站上的一些輸入的限制,是不是有遇過,某些網站必須要輸入數字/或是email做了一定限制的輸入框,這就是regular expression 的最經典的應用。
假設如果前端都將pattern好好的定義清楚了,那麼跟Data engineer,當然是沒什麼關係,但很常時候,我們並不會全權依賴前端提供的結構化資料,需要去爬蟲獲取其他外部網站也是一件很正常的事情,這時候,資料的品質與爬蟲的內容就不全然是你可以控制的,所以這個時候,就會需要為不乾淨的資料來點代價。
這邊只會簡單列幾個常用的pattern,文章的最後我會提供一些比較完整的pattern供大家參考!
pattern | meaning of pattern | example | Match | Not Match |
---|---|---|---|---|
. |
所有的字元都會被match 到 | p.g |
pig,pag,p0g,p^g | Everything Match |
\d |
所有數字 : 0-9 | p\d |
p1,p9 | pi,py |
\D |
除了數字之外 | p\D |
pi,py | p1,p9 |
\s |
空白(whitespace) | p\sg |
p g | pig |
\S |
除了空白之外 | p\Sg |
pig | p g |
\w |
[a-zA-Z0-9__] | \w |
a | %$ |
[] |
or 的概念,在中括號裡面的都可以 | p[ai]g |
pag,pig | peg,pog,pug |
^[] |
nor 的概念,除了你中括號中的都可以 | p[^ai]g |
peg,pog,pug... | pag,pig |
* |
0個到無限多個 | pi*g |
pg,pig,piig,piiig | pag,pbg |
+ |
1個到無限多個 | pig+ |
pig,piig,piiig | pg,pag |
? |
0個或1個 | pi?g |
pg,pig | pi,piig,piiig |
.* |
任何字串由某個開頭的 | p.* |
pi,pig,piggy | apig |
{n} |
同一個位置重複n次 | pi{2}g |
piig | pg,pig,piiig |
{n,m} |
同一個位置重複n到m次都可以 | pi{2,4}g |
piig,piiig,piiiig | pg,pig |
{n,} |
同一個位置重複n到無限次都可以 | pi{2,}g |
piig,piiig..piiiiig | pg,pig |
^ |
以什麼樣的東西開頭 | ^p |
pig | apig |
$ |
以什麼樣的東西結尾 | g$ |
pig,aag,bbg | pi |
\n |
換行符號 | \n |
恩就是換行符號 | |
\t |
Tab符號 | \t |
恩就是Tab符號 | |
\r |
回到第一行的換行符號 | \r |
恩對 | |
\r\n |
微軟的醜不拉機換行 | \r\n |
恩對 |
簡單的說明就到這邊,如果對regular expression 有興趣的話,可以到這個網站上去做測試,我覺得算是很有幫助
介面也非常友善,可以測試任何你的data 或是你設計的pattern,在你實際寫成code之前就可以一目瞭然,快來試試看你的pattern 是不是work吧
正規表示式測試網站
希望今天的介紹對大家有幫助!明天,我們就正式進入regular expression 與pyspark 的愛恨情仇啦!