如何設定REGEXP PATTERN才能取出正確資料呢?
- 帖子
- 231
- 主題
- 55
- 精華
- 0
- 積分
- 293
- 點名
- 0
- 作業系統
- winxp
- 軟體版本
- office2003
- 閱讀權限
- 20
- 性別
- 男
- 來自
- KEELUNG
- 註冊時間
- 2010-7-24
- 最後登錄
- 2018-8-28
|
如何設定REGEXP PATTERN才能取出正確資料呢?
各位大大好:
小弟引用REGEXP來取出A欄的字串
並設定PATTERN來將A1取出五個字串。
但目前想將有逗號包含在字串內,
對7,852及119,258,226各視為一個
字串並填入A列的指定欄位內。
但PATTERN 設定一直無法逹成。
請各位大大能相助,如何修正
PATTERN的設定值呢?
A欄資料如下:
22 2 PCE 7,852 119,258,226
106 2 PCE 10,117,852 226
10 11 PCE 17,852 119,258,226
1080 118 PCE 1,117,852 119,258
109 1429 PCE 17,852 19,258
110 51511 PCE 17,852 119,258,226
11125 515 PCE 517,852 9,258,226
語法如下:
Sub aa()
Dim mSht As Worksheet
Dim mRng As Range, mRng1 As Range
Dim mRegexp As New RegExp
Dim mPtn$, mStr$
Dim matchCol, matchA
Dim s%
Set mRegexp = CreateObject("vbscript.regexp")
Set mSht = Worksheets("temp")
s = 1
mPtn = "\d+|PCE|\d+,[0-9]{3}" '如何修正mPtn
With mSht
Set mRng1 = .Range("a1", .Range("a" & .Rows.Count).End(xlUp))
For Each mRng In mRng1
mStr = mRng.Value
With mRegexp
.Global = True
.IgnoreCase = False
.Pattern = mPtn
Set matchCol = .Execute(mStr)
End With
For Each matchA In matchCol
mRng.Offset(, s) = matchA.Value
s = s + 1
Next
s = 1
Next
End With
End Sub
謝謝各位大大! |
|
|
|
|
|
|
|
- 帖子
- 231
- 主題
- 55
- 精華
- 0
- 積分
- 293
- 點名
- 0
- 作業系統
- winxp
- 軟體版本
- office2003
- 閱讀權限
- 20
- 性別
- 男
- 來自
- KEELUNG
- 註冊時間
- 2010-7-24
- 最後登錄
- 2018-8-28
|
回復 2# kimbal
版主大大您好:
謝謝版主大大提供此方式是最理想的解題了。
實不相滿,小弟近日迷上REGEXP此
文字處理程式,此工具程式在處理文字
字串方面實在擁有極大功能。因此,
小弟在工作上如遇上文字處理時,
開始改用REGEXP來解題。
小弟目前對本題的解提方式
是先將「,」取代即可取出
A欄位的所有資料。但小弟是
借此問題來磨練自已。希望能
在PATTERN設定上有所突破呢?
感恩大大! |
|
|
|
|
|
|
|
- 帖子
- 231
- 主題
- 55
- 精華
- 0
- 積分
- 293
- 點名
- 0
- 作業系統
- winxp
- 軟體版本
- office2003
- 閱讀權限
- 20
- 性別
- 男
- 來自
- KEELUNG
- 註冊時間
- 2010-7-24
- 最後登錄
- 2018-8-28
|
回復 4# stillfish00
大大的神來之筆有如畫龍點睛一樣。
想不到pattern的設定會有如此的變化,
這是令小弟著迷的地方了。
不知能否請大大能再開示
其中的此( )應用方式為何,
小弟目前還無法理解呢?
感恩大大! |
|
|
|
|
|
|
|
- 帖子
- 231
- 主題
- 55
- 精華
- 0
- 積分
- 293
- 點名
- 0
- 作業系統
- winxp
- 軟體版本
- office2003
- 閱讀權限
- 20
- 性別
- 男
- 來自
- KEELUNG
- 註冊時間
- 2010-7-24
- 最後登錄
- 2018-8-28
|
回復 6# stillfish00
謝謝大大的詳解。
小弟會先收下,再慢慢
去體會它的含意。
感恩大大! |
|
|
|
|
|
|
|
- 帖子
- 231
- 主題
- 55
- 精華
- 0
- 積分
- 293
- 點名
- 0
- 作業系統
- winxp
- 軟體版本
- office2003
- 閱讀權限
- 20
- 性別
- 男
- 來自
- KEELUNG
- 註冊時間
- 2010-7-24
- 最後登錄
- 2018-8-28
|
回復 8# sunnyso
謝謝大大的範例,
小弟已將它納入珍藏。
小弟也是近日才發現
REGEXP EXPRESS 確實
在字串處理上有它的強項,
值得發心思好好學習。
我知道要學好它的不二法門,
就是要不斷的練習,也祈望
能否領會出它的精隨。
不知大大能否推薦好的
REGEXP敎學範例網站嗎?
感恩大大! |
|
|
|
|
|
|
|
- 帖子
- 231
- 主題
- 55
- 精華
- 0
- 積分
- 293
- 點名
- 0
- 作業系統
- winxp
- 軟體版本
- office2003
- 閱讀權限
- 20
- 性別
- 男
- 來自
- KEELUNG
- 註冊時間
- 2010-7-24
- 最後登錄
- 2018-8-28
|
各位大大好:
小弟有二個範例,
第一個範例:
Pattern = "\d+\s+(?=元)."
可以取出
100 元
8000 元
57 元
第二個範例
.Pattern = "\d+\s+(?=方元)."
但僅取出
100 方
8000 方
57 方
請問如何可同時取出字串"方元"呢?
Sub aa()
Dim regex As New RegExp
Dim sr, mat, m
sr = "abc 100 元 8000 元 57 元 efg"
With regex
.Global = True
.Pattern = "\d+\s+(?=元)."
Set mat = .Execute(sr)
For Each m In mat
Debug.Print m
Next m
End With
End Sub
Sub bb()
Dim regex As New RegExp
Dim sr, mat, m
sr = "abc 100 方元 8000 方元 57 方元 efg"
With regex
.Global = True
.Pattern = "\d+\s+(?=方元)."
Set mat = .Execute(sr)
For Each m In mat
Debug.Print m
Next m
End With
End Sub |
|
|
|
|
|
|
|
- 帖子
- 231
- 主題
- 55
- 精華
- 0
- 積分
- 293
- 點名
- 0
- 作業系統
- winxp
- 軟體版本
- office2003
- 閱讀權限
- 20
- 性別
- 男
- 來自
- KEELUNG
- 註冊時間
- 2010-7-24
- 最後登錄
- 2018-8-28
|
謝謝各位大大。
第二項已找出方法可解決了。
設定如下:
mPtn = "\d+\s+(?=PCS).{3}" |
|
|
|
|
|
|
|
- 帖子
- 231
- 主題
- 55
- 精華
- 0
- 積分
- 293
- 點名
- 0
- 作業系統
- winxp
- 軟體版本
- office2003
- 閱讀權限
- 20
- 性別
- 男
- 來自
- KEELUNG
- 註冊時間
- 2010-7-24
- 最後登錄
- 2018-8-28
|
回復 14# stillfish00
謝謝大大提供更精緻的語法,
也同時提供學習的網站。
小弟對大大如此了解REGEXP
EXPRESS的應用。想必已經是
出神入化的境界了。
不知大大能否利用此園地,開闢
有關REGEXP EXPRESS學習
指南。
這樣也能渡化我們這些晚輩。
說實在,好些年前就有向
OOBIRD版主請敎過。
而當時實在是不得其門而入。
如今,不想在半途而退,
也希望能熬過這段學習的痛苦期了。
祝福大大
事事順心 |
|
|
|
|
|
|
|
- 帖子
- 231
- 主題
- 55
- 精華
- 0
- 積分
- 293
- 點名
- 0
- 作業系統
- winxp
- 軟體版本
- office2003
- 閱讀權限
- 20
- 性別
- 男
- 來自
- KEELUNG
- 註冊時間
- 2010-7-24
- 最後登錄
- 2018-8-28
|
回復 14# stillfish00
大大您好:
小弟從大清早起,就開始學習設定
大大之前提供之語法,並稍加更改下列字串。
只是mPtn之設定還是無法如願,請大大再幫
小弟看看如何修正pattern呢?
mPtn = "PCE|\d+([.]?\d{0,2}|,\d{3}[.]?\d{0,2})*"
22 2 PCE 7,852.60 119,258,226.05
106 2 PCE 10,117,852 226.15
10 11 PCE 17,852 119,258,226.25
1080 118 PCE 1,117,852 119,258
109 1429 PCE 17,852.55 19,258
110 51511 PCE 17,852.70 119,258,226
11125 515 PCE 517,852 9,258,226.75
11.5 515 PCE 6.75 105.5
謝謝大大! |
|
|
|
|
|
|
|
- 帖子
- 231
- 主題
- 55
- 精華
- 0
- 積分
- 293
- 點名
- 0
- 作業系統
- winxp
- 軟體版本
- office2003
- 閱讀權限
- 20
- 性別
- 男
- 來自
- KEELUNG
- 註冊時間
- 2010-7-24
- 最後登錄
- 2018-8-28
|
回復 16# dechiuan999
謝謝各位大大。
小弟對pattern的設定已解開了。
mPtn = "PCE|\d([,}?\d{3}?[.]?\d{0,2})*" |
|
|
|
|
|
|
|