在正则表达式中使用量词后的性能 - VB.NET

Performance after using quantifiers in Regular Expression - VB.NET

我们有一个使用正则表达式比较 CSV 行的脚本。 CSV 行有 4 列,以分号作为分隔符。

使用正则表达式比较CSV行的代码片段如下:

strPattern = ""
strPattern &= "([^\;]{1,64})\;#" 
strPattern &= "([^\;]{0,64})\;#" 
strPattern &= "([^\;]{0,64})\;#" 
strPattern &= "([^\;]{0,64})\" 

上面的量词 {0, 64} 匹配前面的元素至少 0 次,但不超过 64 次。

现在,需要将量词中的最大值从 {0, 64} 增加到 {0, 1256}。但话又说回来,该列的字符数有可能超过最大值1256。

所以,我考虑完全排除量词中的最大值,因为我们无法预测一列可能包含多少个字符。

排除最大值后,脚本现在如下所示:

strPattern = ""
strPattern &= "([^\;]{1,})\;#" 
strPattern &= "([^\;]{0,})\;#" 
strPattern &= "([^\;]{0,})\;#" 
strPattern &= "([^\;]{0,})\" 

量词 {0,} 比较前面的元素 0 次或多次。

我想知道删除量词中的最大值是否会导致性能问题?单个 CSV 文件可能包含 1000 到 50000 条记录。所以,我想知道在处理数千条 CSV 行时,删除最大值是否会导致严重的性能延迟。

我没有所需的测试数据来查看这是否会导致性能问题。

所以,如果有人有使用没有最大值的量词的经验,那就太好了。

如果您被限制更改解析 CSV 的实现,那么您似乎别无选择,只能删除最大限制。要问的问题是,如果大小超过 1256,您要比较它们吗?看起来答案是肯定的。

话虽这么说,唯一的选择就是取消限制。现在根据我的经验猜测性能将如何受到影响:

应该不会有问题。

您可以随时模拟一些数据并进行测试。您可以随时向企业主提出问题,"Will I need to support 4 quittrillion characters on a line?" 如果它达到 10,000 个字符宽,应该没问题,这并没有那么大。如果它只是捕获数据,它只会读取该行并保存它。没什么大不了的。如果你在做消极的环顾四周什么的,我会更关心。

我处理具有数百万行的文件并且性能是相对正确的?几秒钟重要吗?几分钟?微秒?如果一个 8 小时的过程增加了 5 秒,谁在乎呢。如果一个需要 1 秒的过程变成 2 秒但运行 80,000 次,那么也许它很重要。 :) 祝你好运!