Board logo

標題: [發問] 請問如何取出REGEXP指定的空格之後字串呢? [打印本頁]

作者: dechiuan999    時間: 2015-3-5 16:49     標題: 請問如何取出REGEXP指定的空格之後字串呢?

各位大大好:
小弟想利用regexp來取出下列字串
,而指定字串唯一的共同點是
第三個空白字串為起點並
取出空白字串後的所有字串。
小弟引用下列pattern 卻無法
匹對成功。請問應如何修正pattern
設定呢?

mPtn = "\s{3,3}.*"
A 欄字串內容如下:
A1→aa babcdefg cc dd ee ff gg hh ii
A2→aa bb cdefc dd ee ff gg hh
A3→aijklma bb cc dd ee ff
A4→aba bb cc dd ee ff gg

B欄為取出內容如下:
B1→dd ee ff gg hh ii
B2→dd ee ff gg hh
B3→dd ee ff
B4→dd ee ff gg

謝謝各位大大!
作者: diolin    時間: 2015-3-6 09:56

試試看

Pattern = "\s+\S+\s+\S+\s+(.*)"
B1=Execute(A1).Item(0).SubMatches(0)
作者: dechiuan999    時間: 2015-3-6 10:56

本帖最後由 dechiuan999 於 2015-3-6 10:59 編輯

回復 2# diolin

大大您好:
謝謝大大的相助。
因無法利用EXCEL資料剖析
來分割字串;因而改用REGEXP
來分割字串。
依大大的方式,小弟無法將A欄
已取出的字串再利用REGEXP REPLACE
來清除。
語法如下:
  1. Sub mRegRepStr()   
  2.         
  3.     Dim mPtn As String
  4.     Dim mStr As String
  5.     Dim mRepStr As String
  6.     Dim mSht As Worksheet
  7.     Dim mRng As Range, mRng1 As Range   
  8.    
  9.     Application.ScreenUpdating = False        
  10.     mPtn = "\s+\S+\s+\S+\s+(.*)"
  11.     mRepStr = ""
  12.    
  13.     Set mSht = Worksheets("new")
  14.     With mSht
  15.         Set mRng1 = .Range("a1", .Range("a" & .Rows.Count).End(xlUp))
  16.         For Each mRng In mRng1
  17.             mStr = mRng.Value
  18.             mRng.Value = mRegexpReplace(mPtn, mStr, mRepStr)
  19.         Next
  20.     End With
  21.    
  22.     Set mSht = Nothing
  23.     Set mRng = Nothing
  24.     Set mRng1 = Nothing
  25.    
  26. End Sub

  27. Function mRegexpReplace(mPtn As String, mStr As String, mRepStr As String)
  28.    
  29.     'Regexp Replace
  30.     Dim mRegReplace As New VBScript_RegExp_55.RegExp
  31.    
  32.     Set mRegReplace = New VBScript_RegExp_55.RegExp
  33.     With mRegReplace
  34.         .Global = True
  35.         .IgnoreCase = True
  36.         .Pattern = mPtn
  37.     mRegexpReplace = .Replace(mStr, mRepStr)
  38.     End With
  39.    
  40.     Set mRegReplace = Nothing
  41. End Function
複製代碼

作者: diolin    時間: 2015-3-6 13:43

轉個彎
tmp=.Execute(A1).Item(0).SubMatches(0)
mRegexpReplace=Replace(mStr, tmp, mRepStr)
作者: dechiuan999    時間: 2015-3-6 17:00

回復 4# diolin


    謝謝大大!
小弟引用大大提供的方式
在replcace還是未能成功。
小弟目前對regexp仍在剛起步。
可否請大大提供小弟一個完整範例
供小弟學習否?

感恩大大!
作者: stillfish00    時間: 2015-3-6 18:37

本帖最後由 stillfish00 於 2015-3-6 18:46 編輯

回復 1# dechiuan999
兩種都可以
  1. Sub TestAA()
  2.     Dim oReg As Object
  3.     s = "aa babcdefg cc dd ee ff gg hh ii"
  4. '    s = "aa bb cdefc dd ee ff gg hh"
  5. '    s = "aijklma bb cc dd ee ff"
  6. '    s = "aba bb cc dd ee ff gg"
  7.     Set oReg = CreateObject("vbscript.regexp")
  8.    
  9.     With oReg
  10.         .Pattern = "^\S+\s+\S+\s+\S+\s+(.*)"
  11.         Debug.Print .Replace(s, "$1")   '取代match pattern的部分成為 pattern 中第一個括號內字串
  12.         
  13.         .Pattern = "^\S+\s+\S+\s+\S+\s+"      '同 "^(\S+\s+){3}"
  14.         Debug.Print .Replace(s, "")     '抓出開頭3個word , 將match pattern的部分用""取代掉
  15.     End With
  16. End Sub
複製代碼

作者: dechiuan999    時間: 2015-3-6 19:45

回復 6# stillfish00


    大大您好:
小弟已測試成功了。
小弟深知對於regexp處理文字,
有很大的POWER能力。
可惜小弟卻常常使不上力。

很感恩二位大大!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)