【问题标题】:How can i capture a specific column of data with .Net regex when some columns may be empty?当某些列可能为空时,如何使用 .Net 正则表达式捕获特定的数据列?
【发布时间】:2016-11-24 07:42:58
【问题描述】:

我目前正在使用 .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 中提取到记事本文档中...

【问题讨论】:

  • 如果可能,您应该直接从 Excel 文件中读取。如果没有,如果您将 Excel 工作表保存或导出为 CSV 文件,您的生活会轻松得多。如果做不到这一点,请尝试使用像 Notepad++(或其他)这样的文本编辑器来插入逗号(将 tab 字符替换为“tab”),或者只是附加一个分隔符(,,;,| ,无论如何)复制到每一列。
  • 您似乎有制表符分隔值。在标签上拆分并检索所需的列怎么样?
  • @Mariano 它们是制表符分隔的,但是,如果有几行在“A”列中有数据,而有些则没有,那不会弄乱我的捕获吗?
  • 在您粘贴的文本中,有些行是制表符分隔的,有些则不是。请确认您粘贴的是您正在阅读的确切文本。目前尚不清楚您是想要 H 列中的所有值还是只想要那些与模式匹配的值。请创建一个minimal reproducible example

标签: .net regex


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多