在前段時間進行文字挖掘練習的時候,不會使用正規表示式,深感不宜。所以這裡,我想趕緊學習一下正規表示式。
注:本文是對《正規表示式必知必會》的複習。
正規表示式是一些用來匹配和處理文字的字串,正規表示式語言用來構造正規表示式(最終構造出的字串就成為正規表示式).
正規表示式語言並不是一種完備的程式語言,它甚至算不上是一種能夠直接安裝並執行的程式。
更準確地說,正規表示式語言是內置於其他語言或軟體裡的迷你語言。
例
1
#文字
hello, my name is goat.
#正規表示式
goat
#結果 hello, my name is
goat.
goat本身是純文字,所以看起來不像是正規表示式,但它確實是。
正規表示式可以包含純文字,甚至可以只包含純文字。
在正規表示式中,特殊字元(或字元集合)用來給出要搜尋的東西。字元.(英文句號)可以匹配任何乙個單個的字元。
例
1
#文字
sales1.csv
orders3.csv
sales2.csv
sales.csv
apac1.csv
na1.csv
na2.csv
sa1.csv
#正規表示式
sales.
#結果
sales1.csv
orders3.csv
sales2.csv
sales.csv
apac1.csv
na1.csv
na2.csv
sa1.csv
正規表示式sales.把字串sales和另乙個字元構成的檔名查詢出來。8個檔案裡有3個與這個模式相匹配。
.字元可以匹配任何單個的字元、字母、數字、甚至是.字元本身。
在同乙個正規表示式中,可以出現多個.字元,他們既可以連續出現,也可以間隔出現在模式的不同位置。
例
2
#文字
sales1.csv
orders3.csv
sales2.csv
sales.csv
apac1.csv
na1.csv
na2.csv
sa1.csv
#正規表示式
.a..
#結果
sales1.csv
orders3.csv
sales2.csv
sales.csv
apac1.csv
na1.csv
na2.csv
sa1.csv
我們想要把以na或sa開頭的檔案找出來。正規表示式.a..將na1.csv、na2.csv、sa1.csv找出來,但他還找出了4個我們並不需要的匹配結果。
.字元在正規表示式中有特殊含義,如果我們需要乙個.字元,而不是它在正規表示式中的特殊含義,
我們就需要在.前面加上\(反斜槓)字元,對他進行轉義。\是乙個元字元(表示這個字元有特殊含義,而不是字元本身含義).
例
1
#文字
sales1.csv
orders3.csv
sales2.csv
sales.csv
apac1.csv
na1.csv
na2.csv
sa1.csv
#正規表示式
.a.\.csv
#結果
sales1.csv
orders3.csv
sales2.csv
sales.csv
apac1.csv
na1.csv
na2.csv
sa1.csv
可以看到,我們正確匹配了,我們想要的字串。
在正規表示式中,\字元永遠出現在乙個有著特殊含義的字串行開頭,這個序列可以由乙個或者多個字元構成。
如果需要搜尋\本身,就必須對\進行轉義,相應的轉義序列是兩個連續的反斜槓字元\\。
與匹配任意單個字元的.字元不同,字元集合能匹配特定的字元和字元區間。
例
1(相比於上例減少了
sales2.csv
,增加了
ca1.csv)
#文字
sales1.csv
orders3.csv
sales.csv
apac1.csv
na1.csv
na2.csv
sa1.csv
ca1.csv
#正規表示式
[ns]a.\.csv
#結果
sales1.csv
orders3.csv
sales.csv
apac1.csv
na1.csv
na2.csv
sa1.csv
ca1.csv
這裡正規表示式以[ns]開頭,表示這個集合將匹配字元n或s(但不匹配字元c或其他字元)。
在使用[和]定義的字元集合裡,這兩個元字元之間所有字元都是該集合的組成部分,
字元集合的匹配結果是能夠與該集合裡任意乙個成員匹配的文字。
字元集合在不需要區分大小寫的搜尋操作裡比較常見。
例
1(相比於上例增加了
sam.csv)
#文字
sales1.csv
orders3.csv
sales.csv
apac1.csv
na1.csv
na2.csv
sa1.csv
ca1.csv
sam.csv
#正規表示式
[ns]a[0-9]\.csv
#結果sales1.csv
orders3.csv
sales.csv
apac1.csv
na1.csv
na2.csv
sa1.csv
ca1.csv
sam.csv
為了避免匹配到sam.csv我們在正規表示式中,將.字元替換成[0-9],表示匹配0到9之間的任意乙個數字。
在這裡正規表示式提供了乙個特殊的元字元,字元區間可以用-(連字元)來定義。
-(連字元)作為元字元,只能在[和]之間,在字元集合以外的地方,-只是乙個普通的字元,只能和-本身匹配,因此在正規表示式中-不需要轉義。
要避免讓這個區間的尾字元小於首字元(例如[3-1]),這種區間沒有意義。
字元區間並不僅限於數字,以下都是合法字元區間:
a-z匹配a到z所有大寫字母
a-z匹配a到z所有小寫字母
a-f匹配a到f所有大寫字母
a-z匹配ascii字元a到ascii字元z的所有字母
例
1
#文字
sales1.csv
orders3.csv
sales.csv
apac1.csv
na1.csv
na2.csv
sa1.csv
ca1.csv
sam.csv
#正規表示式
[ns]a[^0-9]\.csv
#結果sales1.csv
orders3.csv
sales.csv
apac1.csv
na1.csv
na2.csv
sa1.csv
ca1.csv
sam.csv
這個例子中[0-9]變成了[^0-9],表示匹配的是任何不是數字的字元。元字元^來表示對乙個字元集合進行取非匹配。
^的效果將作用於給定字元集合裡的所有字元或字元區間,而不僅限於緊跟在^字元後的那乙個字元或字元區間。
正規表示式入門之重複匹配
例1 比如我想匹配文字裡所有的郵箱 文字 文字 send e mail to tom and ada,their mailbox is 1944786548 qq.com and 18755518273 163.com,don t forget,green s mailbox is green.su...
正規表示式入門之位置匹配
位置匹配用來解決在什麼地方進行字串匹配操作的問題。例1 要求匹配文字裡的cat單詞 文字 the cat scattered his food all over the room.正規表示式 cat 結果 the cat s catteredhis food all over the room.從結...
正規表示式字元匹配
普通字元由所有那些未顯式指定為元字元的列印和非列印字元組成。這包括所有的大寫和小寫字母字元,所有數字,所有標點符號以及一些符號。最簡單的正規表示式是乙個單獨的普通字元,可以匹配所搜尋字串中的該字元本身。例如,單字元模式 a 可以匹配所搜尋字串中任何位置出現的字母 a 這裡有一些單字元正規表示式模式的...