Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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解析dxf文件_Java_Regex_String - Fatal编程技术网

Java:使用regex解析dxf文件

Java:使用regex解析dxf文件,java,regex,string,Java,Regex,String,我开始编写自己的dxf文件解析器,遇到了一个正则表达式问题。考虑下面的文本文件(它是我正在处理的一个特定的DXF文件的片段): 我将此文件作为字符串读入,其中包含: String s = FileUtils.readFileToString(file); 然后我想使用正则表达式分割这个字符串,这样我得到一个大小为2的字符串数组,其中LINE实体作为第一个元素,MTEXT实体作为第二个元素。我的第一个想法是使用: String[] tokens = s.split("\\s{2,2}0");

我开始编写自己的dxf文件解析器,遇到了一个正则表达式问题。考虑下面的文本文件(它是我正在处理的一个特定的DXF文件的片段):

我将此文件作为字符串读入,其中包含:

String s = FileUtils.readFileToString(file);
然后我想使用正则表达式分割这个字符串,这样我得到一个大小为2的字符串数组,其中LINE实体作为第一个元素,MTEXT实体作为第二个元素。我的第一个想法是使用:

String[] tokens = s.split("\\s{2,2}0");
但是,这个问题(您可以自己测试)是它返回:

{"", "\nLINE...", "\nMTEXT...", "\n100...", "\n"}
当然,可以很容易地从数组中删除第一个和最后一个字符串,但是如果查看文本文件,您将看到在多行文字实体中有

"    0"
i、 e,四个空格和一个0。不幸的是,我不想在这个问题上分裂。因此,我的问题是:如何使用split和regex解析该数组以简单地获取数组:

String[] tokens = {"\nLINE...", "\nMTEXT..."}

你可以使用积极的前瞻


s.split(\\s\\s0(?=\\nLINE |\\nMTEXT)”

您的密码绝对正确。我刚刚注意到您可以执行:s.split(\\n\\s\\s0\\n),因为文件中的结束行字符是如何设置的。另一个问题。在测试所有dxf实体对象时,是否有方法压缩上述正则表达式。这个列表可以在这里找到:如果您找到一个好的分隔符,如
“\\n\\s\\s0\\n”
,那么我建议您使用它。通常我不使用
split
,因为有时几乎不可能构造精确拆分的表达式。我倾向于直接使用
Pattern
Matcher
对象,并检查匹配项是否有附加条件(例如匹配某个特定关键字)。我手动将那些没有统计条件的匹配项粘在一起,以获得正确的字符串片段列表。