彰化一整天的論壇

 找回密碼
 立即註冊
搜索
查看: 168|回復: 0

在excel vba 使用正規表示法

[複製鏈接]
發表於 2017-6-27 08:30:12 | 顯示全部樓層 |閱讀模式
本帖最後由 discuz 於 2017-6-27 08:34 編輯
  1. Sub Test()
  2.     Dim oReg As Object, s As String, sGet As String
  3.     s = "AAA120CCC4DC"  '120
  4.     's = "120CCC4DC"    '120
  5.     's = "AAA120"       '120
  6.    
  7.     Set oReg = CreateObject("vbscript.regexp")
  8.     With oReg
  9.         .Pattern = "^[^\d]*(\d+).*[        DISCUZ_CODE_0        ]quot;
  10.         If .Test(s) Then
  11.             sGet = .Replace(s, "$1")
  12.             MsgBox "取出文字為: " & sGet
  13.         Else
  14.             MsgBox "字串不符合指定格式"
  15.         End If
  16.     End With
  17. End Sub
複製代碼

簡單解釋一下,正則表示法(正規表達式)是用pattern設置規則
來判斷文字中是否能找到一段是符合規則的字串
開頭的^表示匹配文字開頭
結尾的$表示匹配文字結尾
所以是檢查文字是否完全符合
其中 \d 表示 0或1或2或....或9 的字元
[^\d] 表示非 0或1或2或....或9 的字元
. 表示任意字元
\.  才是表示小數點
* 表示前一個字元重複0次~重複無限多次
+ 表示前一個字元重複1次~重複無限多次
? 表示前一個字元重複0次 或 重複1次
( ) 括號有兩種意義,  
一是為了儲存括號匹配的文字到內部的子字串 , 也就是後來可用"$1"提取出來
一是當( )後面皆上像* + ? 時 重複的不是一個字元而是括號內的字

因此   "^[^\d]*(\d+(\.\d+)?).*$"   解釋意思就是
^  開頭是
[^\d]*  零個或N個非數字文字
\d+   1個以上連續數字
(\.\d+)?   小數點接1個以上連續數字 , 或沒有
.*   任意多個字元 , 或沒有
$  結尾

大致是這樣.........
當然這邊只是一例而已,pattern可以有很多種用法
詳細語法要自己去找正則表示法來看




文章來源: http://forum.twbts.com/viewthread.php?tid=13576
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

 ㄚ母滴雞湯
 員林香純滴雞精

Archiver|手機版|小黑屋|彰化一整天的論壇(Excel,Office)  |网站地图

GMT+8, 2018-1-17 01:39 , Processed in 0.028666 second(s), 10 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表