正規表示式入門之字元匹配

2021-08-06 05:21:36 字數 4223 閱讀 5771

在前段時間進行文字挖掘練習的時候,不會使用正規表示式,深感不宜。所以這裡,我想趕緊學習一下正規表示式。

注:本文是對《正規表示式必知必會》的複習。

正規表示式是一些用來匹配和處理文字的字串,正規表示式語言用來構造正規表示式(最終構造出的字串就成為正規表示式).

正規表示式語言並不是一種完備的程式語言,它甚至算不上是一種能夠直接安裝並執行的程式。

更準確地說,正規表示式語言是內置於其他語言或軟體裡的迷你語言。

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 這裡有一些單字元正規表示式模式的...