如何設定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
謝謝各位大大! |
|
|
|
|
|
|
- 帖子
- 472
- 主題
- 5
- 精華
- 0
- 積分
- 485
- 點名
- 0
- 作業系統
- Windows
- 軟體版本
- MS Office
- 閱讀權限
- 100
- 性別
- 男
- 來自
- 香港
- 註冊時間
- 2010-7-4
- 最後登錄
- 2014-12-28

|
2#
發表於 2013-8-20 00:26
| 只看該作者
直按用資料剖析會不會簡單一點?
先選上A欄- Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
- TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
- Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
- :=" ", FieldInfo:=Array(Array(1, 1), Array(2, 9), Array(3, 1), Array(4, 1), Array(5, _
- 9), Array(6, 9), Array(7, 1), Array(8, 9), Array(9, 1)), TrailingMinusNumbers:=True
複製代碼 |
|
|
|
|
|
|
- 帖子
- 231
- 主題
- 55
- 精華
- 0
- 積分
- 293
- 點名
- 0
- 作業系統
- winxp
- 軟體版本
- office2003
- 閱讀權限
- 20
- 性別
- 男
- 來自
- KEELUNG
- 註冊時間
- 2010-7-24
- 最後登錄
- 2018-8-28
|
3#
發表於 2013-8-20 05:18
| 只看該作者
回復 2# kimbal
版主大大您好:
謝謝版主大大提供此方式是最理想的解題了。
實不相滿,小弟近日迷上REGEXP此
文字處理程式,此工具程式在處理文字
字串方面實在擁有極大功能。因此,
小弟在工作上如遇上文字處理時,
開始改用REGEXP來解題。
小弟目前對本題的解提方式
是先將「,」取代即可取出
A欄位的所有資料。但小弟是
借此問題來磨練自已。希望能
在PATTERN設定上有所突破呢?
感恩大大! |
|
|
|
|
|
|
- 帖子
- 1018
- 主題
- 15
- 精華
- 0
- 積分
- 1058
- 點名
- 0
- 作業系統
- win7 32bit
- 軟體版本
- Office 2016 64-bit
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 桃園
- 註冊時間
- 2012-5-9
- 最後登錄
- 2022-9-28
|
4#
發表於 2013-8-20 09:12
| 只看該作者
本帖最後由 stillfish00 於 2013-8-20 09:19 編輯
回復 3# dechiuan999
mPtn = "PCE|\d+(,\d{3})*" |
|
|
|
|
|
|
- 帖子
- 231
- 主題
- 55
- 精華
- 0
- 積分
- 293
- 點名
- 0
- 作業系統
- winxp
- 軟體版本
- office2003
- 閱讀權限
- 20
- 性別
- 男
- 來自
- KEELUNG
- 註冊時間
- 2010-7-24
- 最後登錄
- 2018-8-28
|
5#
發表於 2013-8-20 13:55
| 只看該作者
回復 4# stillfish00
大大的神來之筆有如畫龍點睛一樣。
想不到pattern的設定會有如此的變化,
這是令小弟著迷的地方了。
不知能否請大大能再開示
其中的此( )應用方式為何,
小弟目前還無法理解呢?
感恩大大! |
|
|
|
|
|
|
- 帖子
- 1018
- 主題
- 15
- 精華
- 0
- 積分
- 1058
- 點名
- 0
- 作業系統
- win7 32bit
- 軟體版本
- Office 2016 64-bit
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 桃園
- 註冊時間
- 2012-5-9
- 最後登錄
- 2022-9-28
|
6#
發表於 2013-8-20 15:17
| 只看該作者
回復 5# dechiuan999
,\d{3} 一逗號三數字
(,\d{3})* (一逗號三數字)出現零次或多次
因為*是用來匹配前一字元 零次或多次
這裡的 ( )* 使括號內規則匹配 零次或多次
當然小括號還有其他特殊功能。。。這裡沒用到就不多說了 |
|
|
|
|
|
|
- 帖子
- 231
- 主題
- 55
- 精華
- 0
- 積分
- 293
- 點名
- 0
- 作業系統
- winxp
- 軟體版本
- office2003
- 閱讀權限
- 20
- 性別
- 男
- 來自
- KEELUNG
- 註冊時間
- 2010-7-24
- 最後登錄
- 2018-8-28
|
7#
發表於 2013-8-20 20:40
| 只看該作者
回復 6# stillfish00
謝謝大大的詳解。
小弟會先收下,再慢慢
去體會它的含意。
感恩大大! |
|
|
|
|
|
|
- 帖子
- 605
- 主題
- 92
- 精華
- 0
- 積分
- 648
- 點名
- 0
- 作業系統
- windows
- 軟體版本
- 7
- 閱讀權限
- 50
- 性別
- 男
- 來自
- macau
- 註冊時間
- 2013-4-5
- 最後登錄
- 2019-2-10
 
|
8#
發表於 2013-8-20 23:47
| 只看該作者
用 “正規表示式”可以做很多事, 例如
尋找字串中的中文字
Function CountDblChr(ByVal sCh As String) As Integer
Set re = CreateObject("vbscript.regexp")
're.Pattern = "[\u4e00-\u9fa5]" '判斷中文字(包括特殊字,但不包括符號。和數字如1)
re.Pattern = "[^\x00-\xff]" '判斷所有的全形字
re.Global = True
re.IgnoreCase = True
Set matches = re.Execute(sCh)
CountDblChr = matches.Count
Set re = Nothing
End Function |
|
ss
|
|
|
|
|
- 帖子
- 231
- 主題
- 55
- 精華
- 0
- 積分
- 293
- 點名
- 0
- 作業系統
- winxp
- 軟體版本
- office2003
- 閱讀權限
- 20
- 性別
- 男
- 來自
- KEELUNG
- 註冊時間
- 2010-7-24
- 最後登錄
- 2018-8-28
|
9#
發表於 2013-8-21 19:50
| 只看該作者
回復 8# sunnyso
謝謝大大的範例,
小弟已將它納入珍藏。
小弟也是近日才發現
REGEXP EXPRESS 確實
在字串處理上有它的強項,
值得發心思好好學習。
我知道要學好它的不二法門,
就是要不斷的練習,也祈望
能否領會出它的精隨。
不知大大能否推薦好的
REGEXP敎學範例網站嗎?
感恩大大! |
|
|
|
|
|
|
- 帖子
- 605
- 主題
- 92
- 精華
- 0
- 積分
- 648
- 點名
- 0
- 作業系統
- windows
- 軟體版本
- 7
- 閱讀權限
- 50
- 性別
- 男
- 來自
- macau
- 註冊時間
- 2013-4-5
- 最後登錄
- 2019-2-10
 
|
10#
發表於 2013-8-21 23:21
| 只看該作者
回復 9# dechiuan999
有個好的網站,但很久沒有上了.找到再po上 |
|
ss
|
|
|
|
|