0
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 的双精度并将它们放入每个组中?!?我理解分组概念,因此 ()()()()().... 查看空格并提取其中的数字会更容易还是可以 (int)(double)(double)(int) (double)(int)(int) 表达式是精心制作的?

4

3 回答 3

2

尝试这样的事情:根据您的数据格式,将非空格字符放在由空格字符或制表符分隔的每个组中。

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

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

于 2013-06-19T11:37:34.303 回答
1

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

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

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

line.split(" ");

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

编辑

忽略第一部分 - control.avgo

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

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

于 2013-06-19T10:47:02.290 回答
1

你可以用你int的 s 代替类似的东西[0-9]+,用你double的 s 代替[0-9]+\.?[0-9]*,你应该没问题,输入类似于示例之一。

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]+)";
于 2013-06-19T10:47:49.380 回答