当某些列可能为空时,如何使用.Net regex捕获特定的数据列?

时间:2016-07-20 22:32:47

标签: .net regex

我目前正在使用.net版本的正则表达式(使用Expresso)捕获数据,我有一些代码适用于很多列,但不适用于某些列。我认为问题是在某些情况下,其中一个开始列是空的:

A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T
USER 1  USER 2  USER 3  USER 4  USER 5  General General General General M.O.L.E.(r) M.O.L.E.(r) Oven    Oven    Oven AMB    Oven AMB    Oven AMB
one 14  Zone 14 Zone 14 Zone 14 Zone 14 Zone 14 Zone 15 Zone 15 Zone 15 Zone 15 Zone 15 Zone 15 Zone 15 Zone 16 Zone 16 Zone 16 Zone 16 Zone 16 Zone 16
All All All All All All All All All All All All All All
Pass (Overnrider) NJH 12/7/2015                 SMG20-27527 (OvenRider) 12/07/2015  07:59:16    OR_FCT_ENTRY_000561 34.0    4.863   15  101.17  24.4    23.9
Pass (Rework) NJH 11/25/2015                    SMG20-27641 (Rework)    11/25/2015  11:46:43    OR_FCT_ENTRY_000560 31.0    4.863   15  100.60  21.7    21.1
Passed (Rework Mole) RH 11/17/2015                  SMG20-27641 (Rework)    11/17/2015  18:35:48    OR_FCT_ENTRY_000558 33.0    4.893   15  100.60  23.3
Pass (Overnrider) NJH 12/7/2015                 SMG20-27527 (OvenRider) 12/07/2015  07:59:16    OR_FCT_ENTRY_000561 34.0    4.863   15  101.17  24.4    23.9
Pass (Rework) NJH 11/25/2015                    SMG20-27641 (Rework)    11/25/2015  11:46:43    OR_FCT_ENTRY_000560 31.0    4.863   15  100.60  21.7    21.1
Passed (Rework Mole) RH 11/17/2015                  SMG20-27641 (Rework)    11/17/2015  18:35:48    OR_FCT_ENTRY_000558 33.0    4.893   15  100.60  23.3
我正在使用的正则表达式是:

^(?:([^\s\n]+)\s+){13}

结果是:

101.17
100.6
15
100.6
4.893

如何确保我捕获的数据始终位于100.XX行中,如下所示(第H行)?

101.17
100.6
101.7
100.6
100.6

仅供参考,这是从excel转到记事本文件......

1 个答案:

答案 0 :(得分:0)

不存在空列,一些列可能包含空格。具体来说,(Rework Mole)应该是一个字段,但是你的正则表达式将它视为两个字段。您需要查找以下两种情况之一:括在括号中的字段或一系列非空白字符。这个正则表达式产生了预期的结果:

^(?:(\([^()]+\)|\S+) +){13}

请注意\s匹配所有类型的空格,包括换行符。分隔符只是空格,所以最好只匹配那些。