我很难想到这个,因为我认为我不知道我的所有选择。
我必须解析一个自由格式文本字段,我需要将值映射到数据库。
以下是一些示例文本,注意:并非所有字段都必须存在,并非所有分隔符都相同,并且并非所有描述符都可用。我确实需要检查该值是仅为数字还是字母数字。
示例1
field1: 999-999234-24-2
field2 Description: a short description
field3: 3.222.1
asdfg
field number four: NO
field5:
示例2
field1: 999-999234-24-2/field2 Description: a short description/field3: 3.222.1 asdfg/field number four: NO/field5:
示例3
999-999234-24-2
示例4
field1: 999-999234-24-2 field2 Description: a short description field3: 3.222.1 asdfg field number four: NO field5:
示例5
field1: 999-999234-24-2 - field2 Description: a short description - field3: 3.222.1 asdfg - field number four: NO - field5:
我想要的是所有字段X都在自己的列中。注意示例数据的顺序相同,但实时数据不是。
现在我不介意在步骤中执行此操作,如果我需要但是很难将值解析为列。有什么建议吗?
我正在考虑使用RegEx的某种案例功能但到目前为止没有运气。
答案 0 :(得分:0)
也许您应该对java .properties格式进行标准化,然后您可以使用此PHP示例来解析它:
答案 1 :(得分:0)
因为它仍然停留在我的脑海中...我开始处理它的方式是开始处理每个案例,看看是否有任何剩余的调整/后果。似乎使这个棘手的是唯一可靠的分隔符是“字段”,如果有人在描述中使用它,它将会破坏。我只需要获取文件并开始迭代。
使用此正则表达式对其进行拆分至少是划分标头和数据的良好起点。基本上,字段加上附加的可选文本,涵盖了在结束前添加“描述”和“第四”的可能性:
字段[^:] {0,12}:
在那之后,你至少必须删除尾随/对于案例#2,对于案例#5来说是' - ',如果你不想在案例#1的数据中使用额外的换行符。
答案 2 :(得分:0)
RegEXP在某些边缘情况下很难维护。尝试编写一个简单的有限状态机
答案 3 :(得分:0)
经过多次尝试/试错我将把它们读入数组并解析每行文本。这很长,一团糟,但应该完成工作。