標題:
[發問]
文字數值拆分
[打印本頁]
作者:
ayubbs
時間:
2015-3-11 12:10
標題:
文字數值拆分
Dear 各位先進大大 :
有一文字數值剖析的問題,向大家求教
一文字 英數混雜 比如 AAA120CCC4DC 想從左起去除英文字取 120 數值
文字串沒有固定長度前後都有可能有英文數字,VBA中可有方式可取得其值,
或是可有涵數方式也可達成
謝謝指導
作者:
stillfish00
時間:
2015-3-11 14:18
回復
1#
ayubbs
Sub Test()
Dim oReg As Object, s As String, sGet As String
s = "AAA120CCC4DC" '120
's = "120CCC4DC" '120
's = "AAA120" '120
Set oReg = CreateObject("vbscript.regexp")
With oReg
.Pattern = "^[^\d]*(\d+).*$"
If .Test(s) Then
sGet = .Replace(s, "$1")
MsgBox "取出文字為: " & sGet
Else
MsgBox "字串不符合指定格式"
End If
End With
End Sub
複製代碼
作者:
ayubbs
時間:
2015-3-13 13:02
回復
2#
stillfish00
謝謝大大指導~小妹笨拙實在不了解這個應用是怎麼達成的
.Pattern =
"^[^\d]*(\d+).*$"
sGet = .Replace(
s, "$1")
如果 字串內容 為 中英文字混符號及 到 如為 "取字串125acd" 可取得125的值
但若為"取字串12.5acd" 可否取得含小數部份 如12.5 字串字樣
謝謝~增加知識
作者:
stillfish00
時間:
2015-3-13 13:40
本帖最後由 stillfish00 於 2015-3-13 13:48 編輯
回復
3#
ayubbs
是的,要看你所謂的數字包含哪些格式
前面例子抓的是只有 0~9的連續數字
因為你說明的敘述只包含這種數字
如果要含小數點
.Pattern = "^[^\d]*(\d+(\.\d+)?).*$"
就可以了
作者:
stillfish00
時間:
2015-3-13 14:29
本帖最後由 stillfish00 於 2015-3-13 14:51 編輯
回復
4#
stillfish00
.Pattern = "^[^\d]*(\d+(\.\d+)?).*$"
簡單解釋一下,正則表示法(正規表達式)是用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可以有很多種用法
詳細語法要自己去找正則表示法來看
另一種寫法:
Sub TestGGG()
Dim oReg As Object, s As String, oMatch As Object, sGet As String
s = "取字串12.3acd" '12.3
's = "120CCC4DC" '120
's = "AAA120" '120
Set oReg = CreateObject("vbscript.regexp")
oReg.Pattern = "\d+(\.\d+)?"
Set oMatch = oReg.Execute(s)
If oMatch.Count > 0 Then
sGet = oMatch(0)
MsgBox "取出數字為: " & sGet
Else
MsgBox "找不到數字"
End If
End Sub
複製代碼
作者:
ayubbs
時間:
2015-3-17 12:43
回復
5#
stillfish00
謝謝大大說明的超詳細的
會好好學習測試,內容看來不簡單要把邏輯給它弄清楚才能活用。
謝謝~又多學到了些知識
作者:
ABK
時間:
2017-6-26 22:56
請教stillfish00大 !
您提供的方法是不是只能用在 英文字母與數字混和的字串, 若是數字與中文字混合的字串是否有對應Pattern可以使用?
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)