当我需要稍后捕获数字时,如何跳过带有数字的行.net regex

时间:2016-09-09 00:19:15

标签: .net regex

我在包含不同大小的数字的文件中捕获数据,前两行包含日期和时间,如下所示。

我可以毫无问题地提取数据,我已尝试匹配但不捕获这些数据点,但这会导致所有输出死亡。并且据我所知,我不能告诉它跳过数字,因为这将排除一切。

我正在使用 EXPRESSO 搜索的制表符分隔文件是:

    8/10/2016   8/10/2016   8/10/2016
    15:41:56    15:41:56    15:41:56
    100.6   100.6   100.6
    237 237 237
    239 239 239
    238.9   238.9   238.9
    63  63  63
    66  66  66
    65  65  65
    136 136 136
    134 134 134
    135 135 135

我目前用于测试的代码是:

    (?:[^\t]*\t*){2}(?<Data>[^\s]*)

输出是(当前捕获第3行,只要输出是我需要的,就可以捕获它们中的任何一行):

    8/10/2016
    15:41:56
    100.6
    237
    239
    238.9
    63
    66
    65
    136
    134
    135

我需要的输出是:

    100.6
    237
    239
    238.9
    63
    66
    65
    136
    134
    135

如何确保我捕获的数据不包含前两行的日期和时间?

我正在使用expresso windows应用程序进行测试,在设计模式选项卡中我有:编译,忽略白色,多行和文化不变检查。

我也在命名我的数据集,因为我有其他应用程序调用它...

2 个答案:

答案 0 :(得分:0)

你应该在你的正则表达式之前加上先行,以确保你匹配的行只有你想要的字符:

(?=[\d.\t]+$)(?:[^\t]*\t*){2}(?<Data>[^\s]*)

它正在查找仅包含数字,小数和制表符的行。

注意:您还应该清理以下项目。

  • (?:[^\t]*\t+){2}:已更改为确保“数据”捕获组之前至少有一个选项卡
  • (?<Data>\S*)\S相当于[^\s],但更清晰

答案 1 :(得分:0)

看起来您需要在标签后捕获最后一组数字和.

\t(?<Data>[\d\.]+)$