构造一个特定的正则表达式

时间:2013-06-19 10:42:38

标签: java regex

import java.util.regex.*;

public class RegexString {

    public static void main( String args[] ){

      // String to be scanned to find the pattern.

      String line  = "control.avgo: 29 50.49854 50.504984 50000 50.5000001 0.0 1 2"


      String pattern = "()()()()()()()()";

      // Create a Pattern object
      Pattern r = Pattern.compile(pattern);

      // Now create matcher object.
      Matcher m = r.matcher(line);
      if (m.find( )) {
         System.out.println("Found value group 0: " + m.group(0) );
         System.out.println("Found value group 1: " + m.group(1) );
         System.out.println("Found value group 2: " + m.group(2) );
         System.out.println("Found value group 3: " + m.group(3) );
         System.out.println("Found value group 4: " + m.group(4) );
         System.out.println("Found value group 5: " + m.group(5) );
         System.out.println("Found value group 6: " + m.group(6) );
         System.out.println("Found value group 7: " + m.group(7) );

      } else {
         System.out.println("Pattern is no good!");
      }
   }
}

大家好!

以上是我在正则表达式中找到的一个简单示例,我打算做的是构造一个正则表达式模式来提取每个数字的整数和双精度并将其放在每个组中。到目前为止,我的研究只能得到整数,我不知道如何提取每个int的double并将它们放入每个组中?!?我理解分组概念,因此()()()()()....是否更容易查看空格并提取其中的数字或can(int)(double)(double)(int) (double)(int)(int)表达式是精雕细琢的?

3 个答案:

答案 0 :(得分:2)

尝试这样的方法:在每个组中放置非空格字符,用空格字符或制表符分隔,具体取决于您的数据格式。

^\S+\s(\d+)\s(\S+)\s(\S+)\s(\S+)\s(\S+)\s(\S+)\s(\d+)\s(\d+)

为了您的方便,这里是测试您的正则表达式的链接..非常有用。 http://gskinner.com/RegExr/

答案 1 :(得分:1)

这个正则表达式是否适用于您需要做的事情?

  String pattern = "([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+)";

或者,您可以使用空格分割字符串。

line.split(" ");

请注意,在每种情况下,您获得的值都是String。您需要使用Integer.parseInt()Double.parseDouble()将它们转换为整数或双精度。

修改

忽略第一部分 - control.avgo

  String pattern = "[^ ]+ ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+)";

Matcher.group(0)专门匹配整个模式。所以根本不要使用它。

答案 2 :(得分:1)

您可以将int替换为[0-9]+,将double替换为[0-9]+\.?[0-9]*,您应该没问题,输入与示例类似。< / p>

String pattern = "([0-9]+) *([0-9]+\\.?[0-9]*) *([0-9]+\\.?[0-9]*) *([0-9]+) *([0-9]+\\.?[0-9]*) *([0-9]+) *([0-9]+)";

(编辑)这对您的输入正常(使用1到8组来获取数字):

  String pattern = "([0-9]+) *([0-9]+\\.?[0-9]*) *([0-9]+\\.?[0-9]*) *([0-9]+) *([0-9]+\\.?[0-9]*) *([0-9]+\\.?[0-9]*) *([0-9]+) *([0-9]+)";