返回列表 上一主題 發帖

[發問] 數字與數字中如果有空格 要如何取代或刪除呢?

回復  小俠客
^ = 匹配字串開頭
\d{1,2} = 是指前面的 \d出現一次到兩次
        另外常用簡化寫法
        \d? = \d ...
stillfish00 發表於 2016-9-2 11:17



    謝謝你,我已做過測試,好像成功了。
我也依樣試寫了一個檢查字串中有沒有年份的function
True :
1) 如有「年」字時,前面有4個數字
2) 如沒有「年」字,前面有4個數字
  1. Function IsYear (ByRef Target As String) As Boolean
  2.     Dim x, oRegexp As Object: Set oRegexp = CreateObject("vbscript.regexp")
  3.     With oRegexp
  4.         .Pattern ="[0-9]{4}[年]?(?![0-9])"
  5.         IsYear = .test(Target)
  6.     End With
  7. End Function
複製代碼
做了測試,好像效果不太好。
1234
12345
1234年
12345年
abc1234
abc1234年
abc12345
abc12345年

這8組也是TRUE,但我只希望第1、3、5、6組是TRUE。用了{4}也無法限制數字字串只能是4個。
我已經加了negative lookahead (?![0-9]) ,限制數字字串後不可再跟數字,但VBA好像不支援negative lookbehind,無法限制數字字串的開始不是數字.....

TOP

本帖最後由 准提部林 於 2016-9-13 15:01 編輯

正則真的不容易!!!

試試公式如何:
=SUM(--TEXT(1&RIGHT(LEFT(A1,FIND("年",A1&"年")-1),{4,5}),"[<11901]-9;[>12099]-9;1;!0"))>0

限定 1901~2099 年之間為有效年,
02015年 雖為2015年,但因含5個數字,判為無效,
不過,abcd2015ppuy 這個不含"年"字,2015就無法用這公式判斷,
abcd2015年ppuy 就OK!

TOP

回復 11# 小俠客
不知道您的原始資料是什麼樣子,如果這些字串不會出現在句首跟句尾,.test那邊就不用改
  1. Function IsYear (ByRef Target As String) As Boolean
  2.     Dim x, oRegexp As Object: Set oRegexp = CreateObject("vbscript.regexp")
  3.     With oRegexp
  4.         .Pattern = "\D(\d{4}年?)\D"
  5.         IsYear = .test("-" & Target & "-")
  6.     End With
  7. End Function
複製代碼

TOP

回復 11# 小俠客
這個要解釋真的不好解釋...
我是會這樣抓啦,你參考看看:
  1. Sub Test()
  2.     Dim oReg: Set oReg = CreateObject("vbscript.regexp")
  3.     Dim x, oMatch
  4.     Const EX1 = "1111 22222 3333年 44444年 abc5555 abc6666年 abc77777 abc88888年"
  5.     With oReg
  6.         .Pattern = "(?:\b|\D)(\d{4})(?=年|\b)"
  7.         .Global = True
  8.         Set oMatch = .Execute(EX1)
  9.         For Each x In oMatch
  10.             Debug.Print "x=" & x, "x.submatches(0)=" & x.submatches(0)
  11.         Next
  12.     End With
  13. End Sub
複製代碼
輸出會是這樣,你好好體會一下
  1. x=1111     x.submatches(0)=1111
  2. x= 3333     x.submatches(0)=3333
  3. x=c5555    x.submatches(0)=5555
  4. x=c6666    x.submatches(0)=6666
複製代碼
表達不清、題意不明確、沒附檔案格式、沒有討論問題的態度~~~~~~以上愛莫能助。

TOP

        靜思自在 : 一個人不怕錯,就怕不改過,改過並不難。
返回列表 上一主題