Java regex到grep多行数据 我有一个大的文本数据,从中我能够达到特定的部分。具体部分如下:

Java regex到grep多行数据 我有一个大的文本数据,从中我能够达到特定的部分。具体部分如下:,java,regex,Java,Regex,我需要将文本分开并分组存储 我尝试使用以下正则表达式: String REGEX ="(Caption)\\s=.*?(VMware USB.*)\"\\;\\n((?:(\\w+)\\s+=\\s+(.*)\\n) {1,21}?)"; 通过应用正则表达式,我得到了gp1“caption”、gp2“vmware usb仲裁服务”、gp3“waithint”和gp4“0”。 我需要获取21行的所有数据 但它只获取第一行和最后一行 一个正则表达式不能匹配任意数量的组。 您应该放弃多行匹配,并

我需要将文本分开并分组存储

我尝试使用以下正则表达式:

String REGEX ="(Caption)\\s=.*?(VMware USB.*)\"\\;\\n((?:(\\w+)\\s+=\\s+(.*)\\n)   {1,21}?)";
通过应用正则表达式,我得到了gp1“caption”、gp2“vmware usb仲裁服务”、gp3“waithint”和gp4“0”。 我需要获取21行的所有数据

但它只获取第一行和最后一行

一个正则表达式不能匹配任意数量的组。
您应该放弃多行匹配,并使用全局修饰符在每行上使用正则表达式。然后可以循环查看结果


。。。或者按照Deepak Bala所说的去做并使用属性。

似乎组号在
*
+
{…}
语句中被覆盖。因此,在执行类似于
(?:(…)*
)的操作时,组1将为每个新匹配项覆盖,因此,在打印组1时,您将只看到最后一个匹配项

但是,您可以这样做:(根据需要更改)

将打印:

Name = Caption
Value = "Universal Plug and Play Device Host"
Name = CheckPoint
Value = 0
Name = CreationClassName
Value = "Win32_Service"
Name = Description
Value = "Provides support to host Universal Plug and Play devices"

使用
java.util.Properties
阅读这篇文章不是更容易吗?我必须以与所示相同的方式进行操作,并且需要在单个正则表达式中获取数据。有可能吗?
String str = "Caption = \"Universal Plug and Play Device Host\"\n"+
  "  CheckPoint = 0\n"+
  "  CreationClassName = \"Win32_Service\"\n"+
  "  Description = \"Provides support to host Universal Plug and Play devices\"";

String regex = "(?:^|\n)\\s*(\\w*)\\s*=\\s*(.*?)(?=\r?\n|$)";

Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
while (m.find()) {
   System.out.println("Name = " + m.group(1));
   System.out.println("Value = " + m.group(2));
}
Name = Caption
Value = "Universal Plug and Play Device Host"
Name = CheckPoint
Value = 0
Name = CreationClassName
Value = "Win32_Service"
Name = Description
Value = "Provides support to host Universal Plug and Play devices"