Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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 使用regex解析具有重复节的平面文件_Java_Regex - Fatal编程技术网

Java 使用regex解析具有重复节的平面文件

Java 使用regex解析具有重复节的平面文件,java,regex,Java,Regex,我有一个平面文件,其中包含以下格式的数据: 1:00 PM Name UniqueID ABX 298819 12 519440AD3 12:00 AM Name UniqueID AX1 239949 01 119440AD3 其中,每个部分都以时间开头,后面是标题,然后是值。我正试图通过正则表达式捕获这些部分,以便获得: section 1: 1:00 PM Name U

我有一个平面文件,其中包含以下格式的数据:

1:00 PM
Name                UniqueID 
ABX 298819 12       519440AD3

12:00 AM
Name                UniqueID 
AX1 239949 01       119440AD3
其中,每个部分都以时间开头,后面是标题,然后是值。我正试图通过正则表达式捕获这些部分,以便获得:

section 1:
1:00 PM
Name                UniqueID 
ABX 298819 12       519440AD3

section 2:
12:00 AM
Name                UniqueID 
AX1 239949 01       119440AD3
然后将这些部分解析为java类对象,如下所示:

public class Section {
    String timestamp;
    List<Row> rows;
}

public class Row {
    String name;
    String uniqueId;
}
但它只返回时间值:

10:30 AM
1:00 PM
1:30 PM
10:30 AM
1:00 PM
1:30 PM

我甚至尝试添加
模式。多行
模式
,但也不起作用。

假设您显示的结构在整个文件中重复,那么有四种类型的行按顺序排列:时间戳、头、数据、空行

例如,如果要将唯一ID与名称分开,可以尝试:

String third = "ABX 298819 12       519440AD3";
String uniqueId = third.replaceAll(".*\\s+(\\w+)", "$1");
String name = third.replaceAll("(.*)\\s+\\w+", "$1");

假设您向我们展示的结构在整个文件中重复,那么顺序中有四种类型的行:时间戳、头、数据、空行

例如,如果要将唯一ID与名称分开,可以尝试:

String third = "ABX 298819 12       519440AD3";
String uniqueId = third.replaceAll(".*\\s+(\\w+)", "$1");
String name = third.replaceAll("(.*)\\s+\\w+", "$1");

您试图提取什么?请尝试以下操作:
(\d+):(\d+)\s(PM | AM)\s*Name\s*UniqueID\s*(\w.*)\s(\d+)\s+(\d+)\s+([\d\w]+)
您只需要启用全局。顺便说一句,你想说什么?尝试使用regex可视化工具,如regexr.com。我已更新了问题您要提取什么?请尝试以下操作:
(\d+):(\d+)\s(PM | AM)\s*Name\s*UniqueID\s*(\w.*)\s(\d+)\s+(\d+)\s+([\d\w]+)
您只需要启用全局。顺便说一句,你想说什么?尝试使用regex可视化工具,如regexr.com。我更新了问题“我认为您可以在没有正则表达式的情况下处理此问题”。您仍在使用regexp,但不是很大的一个。@LakatosGyula我想在发布之前删除它,抱歉。我的观点很简单,我认为解析文本是这里的主要工作,只是为了让它有趣而加入了一些正则表达式。“我认为你可以不用正则表达式来处理这个问题。”但是你仍然在使用正则表达式,只是不是一个大的正则表达式。@LakatosGyula我想在发布之前删除它,对不起。我的观点很简单,我认为解析文本是这里的主要工作,只是为了使它有趣而洒上了一点正则表达式的热情。