none
正規表現,パターン文字列の問題でしょうか? RRS feed

  • 質問

  • お世話になります.Windows7, EXCEL2010のVBA環境です.

    下記のテストコードならマッチするのですが,実環境では一個マッチしない文字列が発生しています.

    Sub testtest()
    Dim myAr        As Variant
    Dim i           As Long
    Dim myRegExp    As Object
    Dim myMatches   As Object
    Dim myMatch     As Object
    Const Ptn       As String = "\[[A-Za-z\s:\-,]+\]"
    myAr = Array("[Whole grain]", "[Wheat flour]" _
    , "[Japanese noodle]" _
    , "[Breads]", "[Chinese noodles]" _
    , "[Precooked noodles]", "[Macaroni and spaghetti]" _
    , "[Fu : gluten products]", "[Others]" _
    , "[Paddy rice grain]", "[Cooked paddy rice]" _
    , "[Paddy rice gruels]", "[Paddy rice diluted gruels]" _
    , "[Paddy rice thin gruels]", "[Upland rice grain]" _
    , "[Cooked upland rice]", "[Nonglutinous rice products]" _
    , "[Glutinous rice products]", "[Whole beans and its products]" _
    , "[Tofu and Abura-age ]", "[Natto]" _
    , "[Others]", "[Beefs, Japanese beef cattle]" _
    , "[Beefs, dairy fattened steer]", "[Imported beefs]" _
    , "[Veals]", "[Ground meat]" _
    , "[Offals]", "[Beef products]" _
    , "[Porks, large type breeds]", "[Porks, medium type breeds]" _
    , "[Ground meat]", "[Offals]" _
    , "[Hams]", "[Bacons]" _
    , "[Sausages]", "[Others]" _
    , "[Muttons]", "[Lambs]" _
    , "[Fowl meats]", "[Broiler meats]" _
    , "[Ground meat]", "[Offals]" _
    , "[Others]")
    
    Set myRegExp = CreateObject("VBScript.RegExp")
    With myRegExp
        .Pattern = Ptn
        .IgnoreCase = True
        .Global = True
    End With
    For i = LBound(myAr) To UBound(myAr)
        Set myMatches = myRegExp.Execute(myAr(i))
        Set myMatch = myMatches.Item(0)
    Next i
    End Sub
    

    上記のコードはテスト用に書いたものですが,実環境ではなぜか[Japanese noodle]のみマッチしません.

    再現性がなくて申し訳ありませんが...よろしくお願い致します.

    2012年2月17日 5:56

回答

  • あげられたコード通りならマッチします。例えば [Japanese noodle] の空白が実は全角だったりしませんか?
    • 回答としてマーク じふ 2012年2月17日 9:03
    2012年2月17日 7:22

すべての返信

  • あげられたコード通りならマッチします。例えば [Japanese noodle] の空白が実は全角だったりしませんか?
    • 回答としてマーク じふ 2012年2月17日 9:03
    2012年2月17日 7:22
  • お世話になります.ワークシートは下記のようなセル配置になっていて,

      A B
    599 [Japanese noodles]

    下記のようにコードで半角スペースを追加していますので原則としてマッチしないはずがないんですが...下記コードには省略がありますが,

    strMediumCategory = strMediumCategory & " " & tmpAr(i + 1, k)の部分を見ていただければと.

    Dim i As Long

    Dim k As Long Dim m As Long Dim MediumCategoryEN() As String Dim Med_EN_RowNumber() As Long Dim strMediumCategory As String Const Ptn_Square_ENG As String = "\[[A-Za-z\s:\-,]+\]" Dim RegExp_SquareBracket_EN As Object Set RegExp_SquareBracket_EN = CreateObject("VBScript.RegExp") With RegExp_SquareBracket_EN .Pattern = Ptn_Square_ENG .IgnoreCase = True .Global = True End With

    m = 0 For i = Lbound(tmpAr) to Ubound(tmpAr) For k = 1 To 10 strMediumCategory = strMediumCategory & " " & tmpAr(i + 1, k) Next k strMediumCategory = Trim(strMediumCategory) If RegExp_SquareBracket_EN.test(strMediumCategory) Then Set myMatches = RegExp_SquareBracket_EN.Execute(strMediumCategory) strMediumCategoryEN = myMatches.Item(0).Value ReDim Preserve MediumCategoryEN(m) ReDim Preserve Med_EN_RowNumber(m) MediumCategoryEN(m) = strMediumCategoryEN Med_EN_RowNumber(m) = i + 1 End If m = m + 1

    Next i


    すみません,わかりにくくて.

    2012年2月17日 8:45
  • すみません,他で指摘されたのですが閉じ括弧が全角になっていました.

    Const Ptn_Square_ENG    As String = "\[[A-Za-z\s:\-,]+(\]|])" 

    として全角の閉じ括弧を追加したらマッチするようになりました.

    お騒がせしました.

    2012年2月17日 9:03