正则表达式返回额外的空值

时间:2013-07-12 11:01:38

标签: regex vba excel-vba excel

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

这是我的Regex代码,这是我从中提取数据的表,

enter image description here

当我在调试模式下运行代码时,PCBaa计数为2,c3和c4为14,C6-c36为36,我的正则表达式代码在提取逗号之间的代码时是错误的吗? / p>

1 个答案:

答案 0 :(得分:3)

好吧,我自己尝试了,似乎首先,似乎你没有在每行之后将计数值重置为0。这可能是有意的,但你知道。 第二件事是正则表达式似乎工作得很好,但总是给你双倍数量,因为它匹配每个匹配结束时的零长度字符串。 因此,对于最后一行(C6-C26),它可以加工:

1)“C6”2)“”3)“C7”4)“”......等等。

为了保持沉默,我对自己有点惊讶,并且不知道为什么现在就是这样。 但是解决方案非常简单:因为你希望结果中没有零长度的字符串(因此它们不会被计算)你只需要将*替换为+,这将告诉正则表达式只匹配至少有一个角色。 因此,您的正则表达式字符串应如下所示:

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

为什么你在c3上得到14分,c4让我感到惊讶...我得到了一个因为零长度匹配而导致重复计算的4因此。