正則匹配固定單詞 EXCEL正規表示式之元字元

2021-10-12 23:07:28 字數 2337 閱讀 7550

上一節中我們講過了正規表示式的基礎語法,舉了乙個例子,把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 若加上 則只能匹配一行中...