上一節中我們講過了正規表示式的基礎語法,舉了乙個例子,把a列資料各個部門中的門字去掉,當時寫的**中:
set regx = createobject("vbscript.regexp")
with regx
.global = true
.pattern = "門"
end with
.pattern = "門",此表示式中的「門」字就是乙個普通字元,如果表示式中只是用普通字元的話,那我們用查詢功能完全可以匹配目標字串,為何還要寫**呢?所以正規表示式中還有另外一種字元,叫做元字元。
比如我們在查詢時通常會用萬用字元「*」表示任意字元,在正規表示式中也有一些固定的字元,他們可以表達某一型別的字元,以實現強大的匹配能力。
下面例舉一些常用的元字元:(注意大小寫之分)
d 匹配乙個數字字元
d 匹配乙個非數字字元
w 匹配包括下劃線的任何單詞字元。[a-za-z0-9_]
w 匹配任何非單詞字元
s 匹配任何空白字元,包括空格、製表符、換頁符等等
s 匹配任何非空白字元
b 匹配乙個單詞邊界,也就是指單詞和空格間的位置
b 匹配非單詞邊界
匹配乙個換行符
匹配乙個回車符
匹配乙個製表符
. 匹配除""之外的任何單個字元。
我們通過具體的例子來體會下這些元字元的作用。
案例1:提取字串
上圖中a列資料把產品和單價寫在一起了,有的是單價在產品前面,有的是單價在產品的後面,現在想把他們分開到兩列。
用函式也可以做 但挺麻煩的。如果用正規表示式,只要把每個單元格中的數字匹配出來,然後替換成空就得到了漢字部分了,反之只要把漢字匹配出來替換為空就得到了數字。
前面我們講過,在元字元中,d 匹配乙個數字字元,我們看下關鍵**:
sub 提取漢字()
dim regx as object, n%
set regx = createobject("vbscript.regexp")
with regx
.global = true
.pattern = "d" '匹配數字
end with
don = n + 1
cells(n + 1, 2).value = regx.replace(cells(n + 1, 1).value, "")
loop until cells(n + 1, 1).value = ""
end sub
同理,d 匹配乙個非數字字元,我們可以通過「d」來匹配漢字,把漢字替換成空,得到數字。**如下:
sub 提取數字()
dim regx as object, n%
set regx = createobject("vbscript.regexp")
with regx
.global = true
.pattern = "d"
end with
don = n + 1
cells(n + 1, 3).value = regx.replace(cells(n + 1, 1).value, "")
loop until cells(n + 1, 1).value = ""
end sub
兩段**的執行結果如下:
如果是字母和漢字放在乙個單元格裡,我們可以用w 匹配任何非單詞字元,這樣就能匹配出字母,替換為空即可得到漢字部分。
案例2:規範格式
s 匹配任何空白字元,包括空格、製表符、換頁符等等,我們把換行符和空格匹配出來並且全部替換為「-」即可。
**如下:
sub 規範格式()
dim regx as object, n%
set regx = createobject("vbscript.regexp")
with regx
.global = true
.pattern = "s"
end with
don = n + 1
cells(n + 1, 2).value = regx.replace(cells(n + 1, 1).value, "-")
loop until cells(n + 1, 1).value = ""
end sub
通過這節課,我們了解了什麼是元字元,並且初步體會到了正規表示式的強大之處,後面我們逐步地講解更加複雜的匹配。
**:公尺巨集office
excel中用正則匹配 EXCEL正規表示式之分組
為了匹配各種型別的字元,正規表示式中引入了元字元,為了解決匹配字元的個數,引入了量詞,有時需要匹配單個字元,有時需要把字串作為乙個整體來匹配,所以我們還要學習一下分組。如 abc 與 abc 是完全不同的兩個匹配。abc,表示匹配abc,最後那個c出現至少兩次,所以匹配出來的是abcc,abccc,...
js 正則匹配
isnumber 是否為數字 regexps.isnumber d d isint 是否為整形 regexps.isint d istime 是否為時間格式 regexps.istime d d d s d d d isdate 是否為日期格式 regexps.isdate d d d isemai...
perl正則匹配
字元的種類是一定的,無非是空格,數字,大小寫字母,和perl中定義的元字元,還有本國語言。所以原則上任何格式的字元都能匹配。匹配工具 選擇符號,關鍵字,量詞,斷言,轉義字元 當出現多個字元組成的 非空格字元時候,例如123,45 3 s sdgg 則使用 0 9a za z 若加上 則只能匹配一行中...