Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 构造特定的正则表达式_Java_Regex - Fatal编程技术网

Java 构造特定的正则表达式

Java 构造特定的正则表达式,java,regex,Java,Regex,大家好 上面是我在正则表达式上发现的一个简单示例,我的目标是构造一个正则表达式模式来提取这些数字中的每一个整数和双精度,并将其放在每个组中。到目前为止,我的研究只能得到整数,我不知道如何提取每个整数的双精度并将它们放入每个组?!?我理解分组的概念,因此是()。。。。查看空格并提取其中的数字会更容易吗?还是可以制作(int)(double)(double)(int)(double)(int)(double)(int)(int)表达式 这个正则表达式是否适用于您需要执行的操作 import java

大家好


上面是我在正则表达式上发现的一个简单示例,我的目标是构造一个正则表达式模式来提取这些数字中的每一个整数和双精度,并将其放在每个组中。到目前为止,我的研究只能得到整数,我不知道如何提取每个整数的双精度并将它们放入每个组?!?我理解分组的概念,因此是()。。。。查看空格并提取其中的数字会更容易吗?还是可以制作(int)(double)(double)(int)(double)(int)(double)(int)(int)表达式

这个正则表达式是否适用于您需要执行的操作

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!");
      }
   }
}
或者,可以使用空格拆分字符串

  String pattern = "([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+)";
请注意,在每种情况下,您得到的值都是一个字符串。您需要使用
Integer.parseInt()
Double.parseDouble()
将它们转换为整数或双精度

编辑

要忽略第一节-control.avgo

line.split(" ");

Matcher.group(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!");
      }
   }
}
或者,可以使用空格拆分字符串

  String pattern = "([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+)";
请注意,在每种情况下,您得到的值都是一个字符串。您需要使用
Integer.parseInt()
Double.parseDouble()
将它们转换为整数或双精度

编辑

要忽略第一节-control.avgo

line.split(" ");

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

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

  String pattern = "[^ ]+ ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+)";
(编辑)这对您的输入正常(使用1到8的组来获取数字):


您可以用
int
s替换类似
[0-9]+
的内容,用
double
s替换
[0-9]+\?[0-9]*
,对于类似于示例的输入,您应该没问题

  String pattern = "[^ ]+ ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+)";
(编辑)这对您的输入正常(使用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]+)";
为了方便起见,这里有一个测试正则表达式的链接。它非常有用。

尝试这样做:根据数据格式,在每组中放置非空格字符,并用空格字符或制表符分隔

  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]+)";
为了方便起见,这里有一个测试正则表达式的链接。它非常有用。

看起来您正在按空间分割。这里可能不需要正则表达式。尝试
line.split(\\s+)line.split(\\s+)