我的文件有多组记录。
示例中的多组记录如下所示
X---Header
K
L
M
Z---Footer
X---Header
K
L
M
Z---Footer
K,L和M是信息记录。
当我在文件中只有一组指令时,我就像这样验证它们
首先阅读记录数,然后逐一验证。
if recordsno = 1
input.record.match(^[X].*$)
else if recordno = 2
input.record.match(^[Z].*$)
else
input.record.match(^[K|L|M].*$)
如果任何记录不匹配,我拒绝该记录。单组指令工作正常。我正在使用java在etl中执行此活动。
但现在我期待多组指令。所以在这种情况下如何验证这一点。请提出任何建议,以便我可以在我现有的代码中添加更多代码来验证这种多组指令。
强制性的东西是..Header应该从X开始,页脚用Z开头,并且在记录之间只有K或L或M.所以如果有任何记录与这种格式不匹配我拒绝该文件。< / p>
有什么建议吗?
由于
答案 0 :(得分:3)
根据您在问题中提出的一般要求,我相信您应该使用本网站JsaPar - library links上提到的Java库之一,而不是尝试使用正则表达式解决此问题。
有一些真正优秀的Java库可以满足您的需求。
这可能不是你问题的直接答案,但那是因为问题是(对我而言)实际上需要解决/完成的问题过于宽泛。
只需查看BeanIO,FlatWorm,JsaPar,EasyBatch,JFFP等文档。
为了对您的问题得到更多反应(或更好的反应),请尝试详细描述记录中包含的内容以及如何检测它们(使它们独特的原因是什么?)。您可以通过指定(或必须基于要求)解决问题的方式来改进您的问题:是否允许使用外部库?仅使用正则表达式是强制性的吗?是否有任何速度/内存使用要求,等等。
我认为用户WiktorStribiżew给出的答案是正确的:“我可以分享的是一个暗示,当你有这么多要求时,你不应该依赖唯一的正则表达式。”我只能承认这一点。
祝你好运!