【发布时间】:2015-04-09 22:00:23
【问题描述】:
我正在尝试解析一些文本,正在寻找最快/最简单的解决方案。我尝试过使用正则表达式,但使用 Java 需要很长时间......
这是我要解析的文本的结构:
*****************
ID: 1234567 // 7 digit uuid
mistakes: There may be some mistakes here, or there may not be any mistakes //optional
mistake type: mistake background // "YES" or "NO"
report: <xml><item>blah, blah</item></xml>
*****************
实际上该文件可能如下所示:
*****************
ID: 1234567
mistakes:
NO: happened on the playground
report: <xml><item>black eye when playing basketball</item><reason>elbow</reason></xml>
*****************
*****************
ID: 1234568
mistakes: Teacher was not watching students at the time of incident
YES: teacher turned her back after seeing an altercation
report: <xml><item>fight</item><reason>None</reason></xml>
*****************
*****************
ID: 1234569
mistakes:
NO
report: <xml><item>Child needed band-aid</item><reason>scrape</reason></xml>
*****************
*****************
ID: 1234570
mistakes:
NO
report: <xml><item>Child needed tissue</item><reason>runny nose</reason></xml>
*****************
...
...
我正在尝试将“键”(ID、错误、错误类型、报告)放入Map 以进行进一步聚合和处理。
我尝试过使用正则表达式,但收效甚微,但客户不断更改报告结构并放弃整个模式。我正在寻找可能更容易维护的东西。过去,我很容易对这样的数据进行 xsl 转换,但这不是纯 xml,我不知道 Java 是否会抛出当前格式。我已询问客户是否愿意更改格式,但他们对此不感兴趣。
有人对如何使这种解析更易于维护有任何想法吗?
谢谢!
编辑:
我没有正则表达式,但这是它的要点
ID:\s*(\\d{7}).*mistakes:\s*(\\d*).*mistake type:\s*(\\d*).*report:\s*(.*)
【问题讨论】:
-
嗯,正则表达式必须非常简单地描述这种格式,只要格式发生变化就更新它们可能没什么大不了的。
-
每次更新都会让人头疼。它似乎总是会破坏某些东西,我需要用几天的谷歌搜索等来找出原因
-
格式一开始就不应该这么频繁地改变...我们可以看看一些代码吗?
-
不同意单个正则表达式。该文件遵循您应该遵循的严格结构。至少对于最后一个(报告),您应该单独解析为 xml。只需流过期待这种结构的线条,并在你走的时候打破填充你的对象列表的星星。
-
@Vedran 我已经在解析报告了。我正试图专注于“挑选钥匙”(ID、MISTAKE、MISTAKE TYPE、REPORT)
标签: java text-parsing