0

我使用正则表达式的时间不长,我正在努力定义正确的正则表达式模式。我已经搜索了这个网站和许多其他网站并没有找到我需要的东西。

这是我需要解析的文件中的子字符串:

    As of 10 AM on:
    9/7/2012         227,134 mmcf.
    9/9/2011         1,224,376 mmcf.
    9/10/2010        424 mmcf.

我需要提取的是任何不是文件内行中的日期的数字。上面示例中的每一行都是文件中的换行符,日期是该行中的第一个单词(如您所料)。日期后面的空格实际上是两个制表符和一个空格。我只需要提取值227,134,并且我需要能够获取任何数字 1 - 999,999,999 的值。如您所见,逗号包含在值中。

我已经能够创建一个匹配任何值(123,456;123,224,376;和 424)的模式,但它也匹配每个日期属性(月、日、年)。我有一个模式可以获取日期和空白,但我不确定之后如何获取值。

这是我正在使用的当前模式:

    ^(?:3[01]|[12][0-9]|[1-9])[/.-](?:1[0-2]|[1-9])[/.-][0-9]{4}         [,0-9]+\b

这符合以下条件:

    9/7/2012         227,134
    9/9/2011         1,224,376
    9/10/2010        424

有没有办法匹配模式的一部分并将其从模式的其余部分中排除?

最好的方法是什么?

我真的只关心在列表中找到第一个值(在本例中为227,134)。

在此先感谢您的帮助。

4

3 回答 3

2
[\d\,]+(?=\smmcf\.)

一个或多个数字或逗号,后跟一个空格和“mmcf”。

于 2012-09-27T18:00:12.547 回答
0

这个正则表达式怎么样?

^\s*\d{0,2}/\d{0,2}/\d{0,4}\s+([\d,]+)\s*.*$

该组是您想要的号码。

这是做什么的

  • ^行首
  • \s*空格(0 次或多次)

现在获取日期

  • \d{0,2}0-2 位数
  • /削减
  • \d{0,2}0-2 位数
  • /削减
  • \d{0,2}0-4 位数

一些空格

  • \s+空格(1 次或多次)

我们想要的号码

  • ([\d,]+)捕获数字和逗号

其余的线路

  • \s*空格(0 次或多次)
  • .*更多数字
  • $行结束
于 2012-09-27T17:57:31.540 回答
0

最简单的做法是匹配行中空格后的数字。您甚至不需要匹配日期。

^\s*\S+\s+([\d,]+)

该组将包含仍包含逗号的数字。

于 2012-09-27T17:59:26.247 回答