【发布时间】:2015-09-05 11:26:53
【问题描述】:
我正在用 C# 编写一个应用程序,它解析一些文本文件并从中获取信息。我需要解析如下表格数据并将信息填充到类的属性中。
我对表格和列标题没有任何问题。我也可以使用捕获组获取数据,但在某些情况下,某些值可能为空(或可能包含空格,如第 4 数据行 Col6)
示例:
===============================================================================
Table Header
===============================================================================
Col1 Col2 Col3 Col4 Col5 Col6
-------------------------------------------------------------------------------
21 abc xyz xyz 1 blablabla
22 abc xyz 1 bla-bla-bla
103 abc xyz xyz 1
4000 abc xyz xyz 1 blabla bla
4001 abc xyz xyz 1
我有这样的数据线模式:
([\w\d\-_\.\*\#\:\\/\<\>]+)\s+([\w\d\-_\.\*\#\:\\/\<\>]+)\s+([\w\d\-_\.\*\#\:\\/\<\>]+)\s+([\w\d\-_\.\*\#\:\\/\<\>]+)\s+([\w\d\-_\.\*\#\:\\/\<\>]+)\s+([\w\d\-_\.\*\#\:\\/\<\>]+)?$
当所有列都包含数据时,它可以正常工作。当我在最后一个捕获组(对于 Col6)中的字符类中添加一个空白字符时,它开始将两个连续的行匹配在一起。我需要逐行匹配。我该怎么做?
第二个问题是,对于许多列,我需要“除空格之外的任何字符”方法,我在捕获组中使用此模式:([\w\d-_.*#:\/\]+ )
如果数据可能包含空格,我将在此模式中添加一个空格字符。这是正确的方法吗?还是在这样的文本中会出现问题(例如列不匹配)?
谢谢
【问题讨论】:
-
两列之间是否有固定长度或制表符是否分开?