0

因为我不认为我知道我所有的选择,所以很难处理这个问题。

我必须解析一个自由格式的文本字段,我需要将值映射到数据库。

这是一些示例文本,注意:并非所有字段都必须存在,并非所有分隔符都相同,并且并非所有描述符都可用。我确实需要检查该值是仅数字还是字母数字。

示例 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 都在自己的列中。注意示例数据的顺序相同,但实时数据不是。

现在,如果需要,我不介意逐步执行此操作,但很难将值解析为列。有什么建议么?

我在想某种带有正则表达式的案例功能,但到目前为止还没有运气。

4

4 回答 4

0

也许您应该标准化 java .properties格式,然后您可以使用这个 PHP 示例来解析它:

http://www.innerweaver.com/?p=13

于 2010-02-15T16:55:48.697 回答
0

因为它仍然卡在我的脑海里......我的方法是开始处理这些情况,看看是否还有任何剩余的调整/后果。似乎使这件事变得棘手的是唯一可靠的分隔符是“字段”,如果有人在描述中使用它,它就会中断。我只需要获取文件并开始迭代。

用这个正则表达式分割它至少是分割标题和数据的一个很好的起点。基本上,字段加上额外的可选文本,涵盖了在结束之前添加的“描述”和“第四号”的可能性:

字段[^:]{0,12}:

之后,您至少必须去除案例#2的尾随/,案例#5的' - ',如果您不希望它们出现在案例#1的数据中,则需要额外的换行符。

于 2010-02-15T18:12:10.647 回答
0

RegEXP 在某些极端情况下很难维护。尝试编写一个简单的有限状态机

于 2010-02-15T18:47:42.963 回答
0

经过多次尝试和错误后,我将把它们读入一个数组并解析出每一行文本。它很长而且会很乱,但应该完成工作。

于 2010-02-18T21:10:59.973 回答