1
Set Regex = New RegExp
Regex.Pattern = """[^""]*""|[^,]*"
Regex.Global = True

//I have a for loop here to loop through records

text = Cells.Item(r, 7).Value
For Each Match In Regex.Execute(text)
    count = count + 1
    Next Match

これは私の正規表現コードです。データを取得するテーブルは次のとおりです。

ここに画像の説明を入力

デバッグ モードでコードを実行すると、PCBaa カウントは 2 になり、c3 と c4 は 14 になり、C6-c36 は 36 になります。

4

1 に答える 1

3

わかりました、私はそれを自分で試してみましたが、最初は、各行の後にカウント値を 0 にリセットしていないようです。それは意図的かもしれませんが、あなたが知っているように。2 つ目は、正規表現はほぼ正常に機能しているように見えますが、各一致の最後に長さ 0 の文字列が一致するため、常に 2 倍の量が得られることです。したがって、最後の行 (C6-C26) では次のようになります。

1) 「C6」 2) 「」 3) 「C7」 4) 「」 ... など。

正直に言うと、私自身少し驚いており、今のところなぜそうなのか正確にはわかりません。しかし、解決策は非常に簡単です。結果にゼロの長さの文字列が含まれないようにしたいので (したがって、それらはカウントされません)、* を + に交換するだけで、正規表現は次の場合にのみ一致するようになります。少なくとも 1 つの文字があります。したがって、正規表現文字列は次のようになります。

Regex.Pattern = """[^""]+""|[^,]+"

c3 で 14 のカウントがあるのはなぜですか、c4 は私を驚かせます...長さゼロの一致による二重カウントのために意味のある 4 を取得しました。

于 2013-07-12T11:37:58.927 に答える