Java基于模式提取数据

时间:2015-01-11 16:46:19

标签: java regex

我正在寻找使用java正则表达式的模式提取器。在这方面的任何帮助表示赞赏。让我举个例子来解释一下。

对于以下输入: 史蒂夫获得9050美元。史蒂夫燃料成本是500美元史蒂夫食品成本是800杰克赢得10000史蒂夫标志是85 80 50 75 60

预期输出如下:

  • 史蒂夫获得9050
  • 史蒂夫燃油成本为500
  • 史蒂夫食物费用是800
  • 杰克赢了10000
  • 史蒂夫在毕业的标志是85 80 50 75 60

在上面的字符串中,有几个单词后跟数字。一旦数字完成,我想将模式分解为一个新行。

空间,时期不是问题。提取更重要。先前数字的数量可能会有所不同。有些人会有2-3个字。在某些情况下,可能有10个字的先前数字。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

匹配句子的模式可以是[\D\s]+[\d\s$\.]+,即非数字和空格,后跟数字,空格,美元和句点。要在Java中提取这些内容,您可以执行以下操作:

import java.util.regex.*;

public class foo {
  public static void main(String[] args) {
    String s = "Steve earns 9050$. Steve fuel cost is 500$ steve food cost is 800 Jack won 10000 steve marks in grad are 85 80 50 75 60";
    Pattern p = Pattern.compile("[\\D\\s]+[\\d\\s$\\.]+");
    Matcher m = p.matcher(s);

    while(m.find()) {
      System.out.println(m.group(0));
    }
  }
}

如果您希望在数字后面有超过美元和句点的字符,请将它们放在第二个[]组中。如果您不想要美元和期间,请删除它们。在这种情况下,它们将显示在下一个标记中,除非您在正则表达式的开头添加一些阻止匹配的内容。

Pattern p = Pattern.compile("[^\\s\\.$][\\D\\s]+[\\d\\s]+");
想到了。