返回列表 上一主題 發帖

如何設定REGEXP PATTERN才能取出正確資料呢?

如何設定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

謝謝各位大大!

regTest.rar (8.27 KB)

直按用資料剖析會不會簡單一點?
先選上A欄
  1.     Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
  2.         TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
  3.         Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
  4.         :=" ", FieldInfo:=Array(Array(1, 1), Array(2, 9), Array(3, 1), Array(4, 1), Array(5, _
  5.         9), Array(6, 9), Array(7, 1), Array(8, 9), Array(9, 1)), TrailingMinusNumbers:=True
複製代碼
懂得發問,答案就會在其中

今日の一秒は  明日にない
http://kimbalko-chi.blogspot.com
http://kimbalko.blogspot.com

TOP

回復 2# kimbal


    版主大大您好:

   謝謝版主大大提供此方式是最理想的解題了。
實不相滿,小弟近日迷上REGEXP此
文字處理程式,此工具程式在處理文字
字串方面實在擁有極大功能。因此,
小弟在工作上如遇上文字處理時,
開始改用REGEXP來解題。
小弟目前對本題的解提方式
是先將「,」取代即可取出
A欄位的所有資料。但小弟是
借此問題來磨練自已。希望能
在PATTERN設定上有所突破呢?

感恩大大!

TOP

本帖最後由 stillfish00 於 2013-8-20 09:19 編輯

回復 3# dechiuan999
mPtn = "PCE|\d+(,\d{3})*"

TOP

回復 4# stillfish00


    大大的神來之筆有如畫龍點睛一樣。
想不到pattern的設定會有如此的變化,
這是令小弟著迷的地方了。
不知能否請大大能再開示
其中的此(  )應用方式為何,
小弟目前還無法理解呢?

感恩大大!

TOP

回復 5# dechiuan999
,\d{3}        一逗號三數字
(,\d{3})*   (一逗號三數字)出現零次或多次

因為*是用來匹配前一字元 零次或多次
這裡的 ( )* 使括號內規則匹配 零次或多次

當然小括號還有其他特殊功能。。。這裡沒用到就不多說了

TOP

回復 6# stillfish00


    謝謝大大的詳解。
小弟會先收下,再慢慢
去體會它的含意。

感恩大大!

TOP

用 “正規表示式”可以做很多事, 例如
尋找字串中的中文字

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

TOP

回復 8# sunnyso


    謝謝大大的範例,
小弟已將它納入珍藏。

小弟也是近日才發現
REGEXP EXPRESS 確實
在字串處理上有它的強項,
值得發心思好好學習。
我知道要學好它的不二法門,
就是要不斷的練習,也祈望
能否領會出它的精隨。
不知大大能否推薦好的
REGEXP敎學範例網站嗎?

感恩大大!

TOP

回復 9# dechiuan999
有個好的網站,但很久沒有上了.找到再po上
ss

TOP

        靜思自在 : 欣賞別人就是莊嚴自己。
返回列表 上一主題