標題:
[發問]
請問如何取出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
來清除。
語法如下:
Sub mRegRepStr()
Dim mPtn As String
Dim mStr As String
Dim mRepStr As String
Dim mSht As Worksheet
Dim mRng As Range, mRng1 As Range
Application.ScreenUpdating = False
mPtn = "\s+\S+\s+\S+\s+(.*)"
mRepStr = ""
Set mSht = Worksheets("new")
With mSht
Set mRng1 = .Range("a1", .Range("a" & .Rows.Count).End(xlUp))
For Each mRng In mRng1
mStr = mRng.Value
mRng.Value = mRegexpReplace(mPtn, mStr, mRepStr)
Next
End With
Set mSht = Nothing
Set mRng = Nothing
Set mRng1 = Nothing
End Sub
Function mRegexpReplace(mPtn As String, mStr As String, mRepStr As String)
'Regexp Replace
Dim mRegReplace As New VBScript_RegExp_55.RegExp
Set mRegReplace = New VBScript_RegExp_55.RegExp
With mRegReplace
.Global = True
.IgnoreCase = True
.Pattern = mPtn
mRegexpReplace = .Replace(mStr, mRepStr)
End With
Set mRegReplace = Nothing
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
兩種都可以
Sub TestAA()
Dim oReg As Object
s = "aa babcdefg cc dd ee ff gg hh ii"
' s = "aa bb cdefc dd ee ff gg hh"
' s = "aijklma bb cc dd ee ff"
' s = "aba bb cc dd ee ff gg"
Set oReg = CreateObject("vbscript.regexp")
With oReg
.Pattern = "^\S+\s+\S+\s+\S+\s+(.*)"
Debug.Print .Replace(s, "$1") '取代match pattern的部分成為 pattern 中第一個括號內字串
.Pattern = "^\S+\s+\S+\s+\S+\s+" '同 "^(\S+\s+){3}"
Debug.Print .Replace(s, "") '抓出開頭3個word , 將match pattern的部分用""取代掉
End With
End Sub
複製代碼
作者:
dechiuan999
時間:
2015-3-6 19:45
回復
6#
stillfish00
大大您好:
小弟已測試成功了。
小弟深知對於regexp處理文字,
有很大的POWER能力。
可惜小弟卻常常使不上力。
很感恩二位大大!
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)