如何使用VBA中正則表達式之元字符實現強大的匹配能力?

2021-01-21 木子微媒

我們在查找時通常會用通配符「*」表示任意字符,在正則表達式中也有一些固定的字符,它們可以表達某一類型的字符,以實現強大的匹配能力,這就是元字符。

下面例舉一些常用的元字符:(注意大小寫之分)

\d 匹配一個數字字符

\D 匹配一個非數字字符

\w 匹配包括下劃線的任何單詞字符。[A-Za-z0-9_]

\W 匹配任何非單詞字符

\s 匹配任何空白字符,包括空格、制表符、換頁符等等

\S 匹配任何非空白字符

\b 匹配一個單詞邊界,也就是指單詞和空格間的位置

\B 匹配非單詞邊界

\n 匹配一個換行符

\r 匹配一個回車符

\t 匹配一個制表符

.匹配除"\n"之外的任何單個字符。

我們通過具體的例子來體會下這些元字符的作用:

一、\d 匹配一個數字字符演示效果

總結:在\d情況下,原數據中的數字不僅得到替換而且下劃線也進行了消除。

代碼如下:

Sub 演示VBA正則元字符匹配能力()

Dim regx As Object, n%

『Dim regx As Object聲明regx為對象變量, n%聲明你為整形變量,%為是Interger整型變量的簡寫符號.

Set regx = CreateObject("vbscript.regexp")

With regx

.Global = True 『Global屬性,指查找範圍,true為全部查找,false只查找第一個

.Pattern = "\d" ' 下面例子中逐一替換即可

End With

Do

n = n + 1

Cells(n + 1, 2).Value = regx.Replace(Cells(n + 1, 1).Value, "")

『Cells(n + 1, 2)中2指的是結果所在列.

Loop Until Cells(n + 1, 1).Value = ""

End Sub

二、\D 匹配一個非數字字符演示效果

總結:

2.1 在\D情況下,原數據除了數字以外的數值全部得到了替換而且下劃線也進行了消除。

2.2 下劃線上面沒有數值的,下劃線是按照所佔據的英文狀態下的空格逐一進行替換,有多少個空格就替換多少次,比如最後一行的長下劃線就替換了14個空格。

代碼如下:

Sub 演示VBA正則元字符匹配能力()

Dim regx As Object, n%

『Dim regx As Object聲明regx為對象變量, n%聲明你為整形變量,%為是Interger整型變量的簡寫符號.

Set regx = CreateObject("vbscript.regexp")

With regx

.Global = True 『Global屬性,指查找範圍,true為全部查找,false只查找第一個

.Pattern = "\D" ' 下面例子中逐一替換即可

End With

Do

n = n + 1

Cells(n + 1, 3).Value = regx.Replace(Cells(n + 1, 1).Value, "")

『Cells(n + 1, 3)中3指的是結果所在列.

Loop Until Cells(n + 1, 1).Value = ""

End Sub

三、\w 匹配包括下劃線的任何單詞字符演示效果。[A-Za-z0-9_]

總結:

3.1大小寫字母、數字和空白下劃線都進行了替換,有數值的下劃線消失不見。

代碼如下:

Sub 演示VBA正則元字符匹配能力()

Dim regx As Object, n%

『Dim regx As Object聲明regx為對象變量, n%聲明你為整形變量,%為是Interger整型變量的簡寫符號.

Set regx = CreateObject("vbscript.regexp")

With regx

.Global = True 『Global屬性,指查找範圍,true為全部查找,false只查找第一個

.Pattern = "\w" ' 下面例子中逐一替換即可

End With

Do

n = n + 1

Cells(n + 1, 4).Value = regx.Replace(Cells(n + 1, 1).Value, "")

『Cells(n + 1, 4)中4指的是結果所在列.

Loop Until Cells(n + 1, 1).Value = ""

End Sub

至此代碼不再一一展示,只要改一下元字符運行即可看到效果.

四、\W 匹配任何非單詞字符演示效果

總結:

4.1 圖文除字母、數字和空白數值的下劃線以外的字符都進行了替換。

五、\s 匹配任何空白字符,包括空格、制表符、換頁符等等

六、\S 匹配任何非空白字符

總結:從圖中可以看出空白字符和換行符不會得到替換。

七、\b 匹配一個單詞邊界,也就是指單詞和空格間的位置

總結:圖中重色框線部分就是單詞邊界。

八、\B 匹配非單詞邊界

總結:所謂非單詞邊界是指非空英文單詞字母之間,非空中文字符之間,非空數字之間,非英文字符和空格之間,兩個(含)以上連續空格都是非單詞邊界。

九、\n 匹配一個換行符

總結:從圖中可以看出換行符已經替換。

十、\r 匹配一個回車符

Excel中不能直接按回車換行,否則會自動跳轉至下一個單元格。

十一、\t 匹配一個制表符

什麼是制表符,請看下圖:

制表符可以用來製作表格,它們在第9區。它們有:

制表符

┌ └ ┐ ┘ ─ │ ├ ┤ ┬ ┴ ┼

用它們可以制表(不用Excel),而且只要是宋體,在任何電腦上都可以觀看。

制表符主要應用於word中。

十二、. 匹配除"\n"之外的任何單個字符。

總結:從上圖中可以看出,除了換行符以外的所有字符都得到了替換。

相關焦點

  • 正則表達式:如何匹配一個或多個字符?
    不過,絕大多數正則表達的式實現也支持不區分字母大小寫的匹配操作。比如說,JavaSeript用戶可以用1標誌來強制執行一次不區分字母大小寫的搜索。匹配任意字符前面見到的正則表達式都是靜態純文本,它們根本體現不出正則表達式的威力。下面我們一起來看看如何使用正則表達式去匹配不可預知的字符。在正則表達式裡,特殊字符(或字符集合)用來給出要搜索的東西。字符.
  • 正則表達式在VBA中間是如何應用?正則表達式的實現方式?
    Hi,大家好,本章節開始將會從零開始和大家用圖文的方式,讓你從零基礎學會正則表達式!有興趣的小夥伴可以持續關注我,或者在專欄中進行查看自我學習,願與君攜手前行!在上一個章節說到正則表達式的入門級知識點,本節將會與大家分享一下正則表達式的是具體實現方式是怎麼樣的?
  • Python中使用re模塊實現正則表達式的匹配字符串操作
    第八十二節:匹配字符串經過上一節比較枯燥的基礎內容,今天來看看如何利用正則表達式在Python中進行具體操作。在Python中使用正則表達式,首先要導入一個re模塊。re就是Regular Expression(正則表達式)的縮寫,所以導入re模塊就是導入「正則表達式模塊」。
  • 在JavaScript字符串的search()方法中,如何匹配正則表達式?
    第一節:基本概念#JavaScript#正則表達式已經成為各大程式語言的標準,只是在不同的語言中,所使用的方式有所不同,但基本上核心的功能都是一樣的。正則表達式的核心功能是建立一種匹配模式,這個匹配模式可以理解為模板,模子。然後再拿具體的字符串來與這個模式進行匹配,如果匹配上,則表示符合要求,則進一步採用措施。
  • MySQL如何使用正則表達式?(代碼示例)
    MySQL支持基於正則表達式和regexp運算符的另一種模式的匹配操作。下面本篇文章就帶大家認識一下MySQL的正則表達式(Regexp),通過示例來簡單介紹在MySQL中如何使用正則表達式(Regexp),希望對大家有所幫助。
  • Python正則表達式:特殊符號和字符
    正表達式為高級的文本模式匹配,抽取,與/或文本形式的搜索和替換功能提供了基礎。簡而言之,正則表達式(簡稱regex)是由一些字符和特殊符號組成的字符串,它描述了模式的重複或者表達多個字符。python通過標準庫中的re模塊來支持正則表達式。
  • 正則表達式 – 匹配規則
    正則表達式 - 匹配規則基本模式匹配一切從最基本的開始。模式,是正規表達式最基本的元素,它們是一組描述字符串特徵的字符。模式可以很簡單,由普通的字符串組成,也可以非常複雜,往往用特殊的字符表示一個範圍內的字符、重複出現,或表示上下文。
  • 使用JavaScript對正則表達式進行解析
    我的目的不是要嚇你,一旦我們了解了正則表達式那它就變得很簡單:讓人畏懼.....今天,我們將揭開正則表達式的神秘面紗,看到它的含義,它的用途以及如何設計正則表達式來解決問題。1、什麼是正則表達式?正則表達式是描述數據字符串中模式的一種方式。
  • 正則表達式A - 方法及特殊字符用法
    .正則表達式的用法 正則表達式概念: 正則表達式是由普通字符及特殊字符組成的對字符串進行過濾的邏輯公式 正則表達式的創建方式: 1.字面量方式創建 (隱式創建): var reg = /正則表達式/gi;
  • python正則表達式使用方法說明
    曾光紅/文 (同步發布豆瓜網)一、導入re庫python使用正則表達式要導入re庫。import re在re庫中。正則表達式通常被用來檢索查找、替換那些符合某個模式(規則)的文本。二、使用正則表達式步驟1、尋找規律;2、使用正則符號表示規律;3、提取信息,如果每一個字符都能匹配,則匹配成功;一旦有匹配不成功的字符則匹配失敗。
  • PHP正則表達式的快速學習方法
    下面,就讓我們來看一下正則表達式元字符的具體應用。/fo+/因為上述正則表達式中包含「+」元字符,表示可以與目標對象中的 「fool」, 「fo」, 或者 「football」等在字母f後面連續出現一個或多個字母o的字符串相匹配。
  • 正則表達式的基礎知識和Python中的基本應用
    1、元字符指的是在正則表達式中具有特殊意義的專用字符,將一些常用的元字符列在下表中,詳見下圖: ,]」可以匹配標點符號(「.」、「?」、「!」、「,」);「[0-9]」可以匹配所有的數字(等同於元字符\d);「[A-Za-z]」可以匹配所有英文字母;「[\u4e00-\u9fa5]」可以匹配所有漢字,連續匹配多個漢字則使用「[\u4e00-\u9fa5]+」。以上這些都是現成的可以拿去用的字符類正則表達式。
  • Python「正則表達式」詳解(上)
    可以通過正則表達式,從字符串中獲取我們想要的特定部分。大家可以簡單的理解為兩點:search和match。OK,了解了正則表達式的概念和作用,我們趕緊進入Python的學習吧!正則表達式不是Python獨有的武器,但Python中的正則表達式無疑是最簡單卻又最強大的。在Python中使用正則表達式,需要導入re模塊,如下圖所示。
  • 新手上路:圖文解讀助你理解和使用正則表達式
    選自janmeppe.com作者:Jan Meppe機器之心編譯參與:韓放、杜偉這篇博客是關於正則表達式(regex)的插圖指南,旨在為那些從來沒有使用過正則表達式,想嘗試但又望而生畏的新手提供一個簡單介紹。
  • Python正則表達式由淺入深(一)
    幸運的是Python提供了re模塊,可以實現正則表達式的操作。re模塊主要通過六大方法來對字符串進行處理,包括:match()、search()、findall()、split()、sub()。這些方法涉及到字符串的匹配與替換等操作,在接下來的4篇連載文章裡,我們不單只會講解這4種方法,還會把元字符、行定位符、限定符、字符類、排除字符、選擇字符、轉義字符、分組等正則表達式最常用知識點貫穿起來。
  • 正則表達式和 CPU 100%有什麼故事?
    沒關係,我們一點點從正則表達式的原理開始講起。正則表達式引擎正則表達式是一個很方便的匹配符號,但要實現這麼複雜,功能如此強大的匹配語法,就必須要有一套算法來實現,而實現這套算法的東西就叫做正則表達式引擎。
  • 代碼詳解:Python正則表達式的終極使用指南
    人們可能想要在文本中找出特定格式的內容,比如找出存在於文本中的電子郵件,或者大型文本中的電話號碼。雖然想要實現上述功能聽起來很繁瑣,但是如果使用Python正則表達式模塊,就可以使這一操作更加簡單。假設要在一篇特定的文章中找出標點符號的數量。以狄更斯的作品文本為例。你通常會怎麼做?
  • Python(2):正則表達式的常見符號與作用,每個都有示例
    承接上篇文章,本文將羅列出Python中正則表達式常用的符號,也叫做元字符,正是憑藉元字符正則表達式方才展現出強大的檢索功能和受人青睞的靈活性。o指數號(^)-匹配以指定字符開頭的字符串示例:^start—匹配以start開頭的字符串美元符($)-匹配以指定字符結尾的字符串示例:/aa/bb$—匹配以"/aa/bb"為結尾的字符串匹配元字符須使用轉義符(\)如果想要匹配的字符是正則表達式中的特殊字符,那麼就需要加上轉義符(\),示例:匹配$結尾的字符串
  • 如何徹底搞懂面向 Web 開發者的正則表達式?
    對於正則表達式,開發者如何跳出雲裡霧裡的謎團?作者 | Chris Achard譯者 | 彎月,責編 | 郭芮以下為譯文:正則表達式能在字符串中查找匹配特定模式的子字符串。在JavaScript中,可以通過斜線 / / 來創建,也可以通過new RegExp()來創建,然後就能使用match、test、replace等方法。你可以事先定義正則表達式,也可以在調用方法時隨時定義。每次匹配一個字符,將多個字符放到方括號 [] 中可以匹配多個匹配的字符。用橫線 - 匹配字符範圍。
  • Python 正則表達式-函數用法分析
    不管是檢索還是替換,都需要匹配規則,我們根據需要編寫了匹配規則,但我們寫的匹配規則計算機並不會直接用來匹配,計算機會把我們寫的匹配規則轉換成它的規則,這個過程我們叫做編譯(compile),這個編譯過程我們看不見,但比較耗時,為了提高效率,就將編譯過後的正則表達式放到緩存中,內存可能會影響其他程序,當我們需要優化佔用內存的時可以清除緩存(purge)。