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。这可能是故意的,但你知道。第二件事是正则表达式似乎工作得几乎很好,但总是给你双倍的数量,因为它在每次匹配结束时匹配一个零长度的字符串。所以对于最后一行(C6-C26),它是:

1) "C6" 2) "" 3) "C7" 4) "" ... 以此类推。

老实说,我自己有点惊讶,现在不知道为什么会这样。但是解决方案非常简单:由于您希望结果中没有零长度字符串(因此它们不会被计算在内)您只需将 * 交换为 + ,这将告诉正则表达式仅在以下情况下匹配至少有一个字符。因此,您的正则表达式字符串应如下所示:

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

为什么你在 c3 上计数为 14,c4 让我感到惊讶……我得到了一个 4,这是因为由于零长度匹配而导致的重复计数。

于 2013-07-12T11:37:58.927 回答