如何設定REGEXP PATTERN才能取出正確資料呢?
- 帖子
- 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
|
12#
發表於 2013-8-23 09:09
| 只看該作者
謝謝各位大大。
第二項已找出方法可解決了。
設定如下:
mPtn = "\d+\s+(?=PCS).{3}" |
|
|
|
|
|
|
- 帖子
- 1018
- 主題
- 15
- 精華
- 0
- 積分
- 1058
- 點名
- 0
- 作業系統
- win7 32bit
- 軟體版本
- Office 2016 64-bit
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 桃園
- 註冊時間
- 2012-5-9
- 最後登錄
- 2022-9-28
|
13#
發表於 2013-8-23 09:22
| 只看該作者
本帖最後由 stillfish00 於 2013-8-23 09:23 編輯
回復 11# dechiuan999
無空格也能匹配:
"\d+\s*元"
"\d+\s*方元" |
|
|
|
|
|
|
- 帖子
- 1018
- 主題
- 15
- 精華
- 0
- 積分
- 1058
- 點名
- 0
- 作業系統
- win7 32bit
- 軟體版本
- Office 2016 64-bit
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 桃園
- 註冊時間
- 2012-5-9
- 最後登錄
- 2022-9-28
|
14#
發表於 2013-8-23 09:25
| 只看該作者
本帖最後由 stillfish00 於 2013-8-23 09:34 編輯
回復 9# dechiuan999
相關網站
http://msdn.microsoft.com/en-us/library/1400241x(VS.85).aspx
這篇也蠻有趣的
http://technet.microsoft.com/zh-tw/magazine/2008.05.heyscriptingguy.aspx |
|
|
|
|
|
|
- 帖子
- 231
- 主題
- 55
- 精華
- 0
- 積分
- 293
- 點名
- 0
- 作業系統
- winxp
- 軟體版本
- office2003
- 閱讀權限
- 20
- 性別
- 男
- 來自
- KEELUNG
- 註冊時間
- 2010-7-24
- 最後登錄
- 2018-8-28
|
15#
發表於 2013-8-24 08:35
| 只看該作者
回復 14# stillfish00
謝謝大大提供更精緻的語法,
也同時提供學習的網站。
小弟對大大如此了解REGEXP
EXPRESS的應用。想必已經是
出神入化的境界了。
不知大大能否利用此園地,開闢
有關REGEXP EXPRESS學習
指南。
這樣也能渡化我們這些晚輩。
說實在,好些年前就有向
OOBIRD版主請敎過。
而當時實在是不得其門而入。
如今,不想在半途而退,
也希望能熬過這段學習的痛苦期了。
祝福大大
事事順心 |
|
|
|
|
|
|
- 帖子
- 231
- 主題
- 55
- 精華
- 0
- 積分
- 293
- 點名
- 0
- 作業系統
- winxp
- 軟體版本
- office2003
- 閱讀權限
- 20
- 性別
- 男
- 來自
- KEELUNG
- 註冊時間
- 2010-7-24
- 最後登錄
- 2018-8-28
|
16#
發表於 2013-8-24 09:33
| 只看該作者
回復 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
|
17#
發表於 2013-8-25 09:14
| 只看該作者
回復 16# dechiuan999
謝謝各位大大。
小弟對pattern的設定已解開了。
mPtn = "PCE|\d([,}?\d{3}?[.]?\d{0,2})*" |
|
|
|
|
|
|
- 帖子
- 1018
- 主題
- 15
- 精華
- 0
- 積分
- 1058
- 點名
- 0
- 作業系統
- win7 32bit
- 軟體版本
- Office 2016 64-bit
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 桃園
- 註冊時間
- 2012-5-9
- 最後登錄
- 2022-9-28
|
18#
發表於 2013-8-25 23:40
| 只看該作者
回復 17# dechiuan999
雖說pattern的設計本來就有很多種,但你這 [,} 左右不對稱我就看不懂了。
若是考慮小數,我會改用 "PCE|\d+(,\d{3})*(\.\d+)?"
其實這主要要根據你可能的資料有哪些形式,看你要多嚴格才能夠抓的正確,
若可能的資料字串只有你寫的那些形式,寬鬆點抓用 "PCE|[0-9,.]+" 甚至用 "\S+" 也是可以的。
最好是看你的思路,由前而後,像上面要匹配小數點後而用的 (\.\d+)?
很容易就能理解成 "一個小數點後面接一個以上數字,或都沒有"
另外有些pattern是等效的,所以寫出來pattern不同也是正常的
如 \d 等同 [0-9]
+ 等同 {1,}
* 等同 {0,}
? 等同 {0,1}
\. 等同 [.]
總之先完全理解各個特殊字元的意義,再像堆積木一樣堆起來,我也沒甚麼特別的方法。 |
|
|
|
|
|
|
- 帖子
- 231
- 主題
- 55
- 精華
- 0
- 積分
- 293
- 點名
- 0
- 作業系統
- winxp
- 軟體版本
- office2003
- 閱讀權限
- 20
- 性別
- 男
- 來自
- KEELUNG
- 註冊時間
- 2010-7-24
- 最後登錄
- 2018-8-28
|
19#
發表於 2013-8-26 22:18
| 只看該作者
回復 18# stillfish00
大大您好:
真讓大大見笑了,
mPtn = "PCE|\d([,}?\d{3}?[.]?\d{0,2})*"
實在是因小弟試過無數次,也都失敗收場。
反而打錯中括號卻可以逹成,也真是奇蹟呢?
大大的語法簡明扼要,也很容易理解。
小弟也感謝您多次開示,也讓小弟能
再往前邁進一小步。
日後,也希望大大能多多敎誨小弟了。
感恩大大! |
|
|
|
|
|
|