C# 用正则表达式解析表格数据
我正在用C编写一个应用程序,它解析一些文本文件并从中获取信息。我需要解析下面这样的表格数据,并将信息填充到类的属性中 我对表和列标题没有问题。我还可以使用捕获组获取数据,但在某些情况下,某些值可能是空的(或者可能包含空格,如第4行中的Col6) 样本:C# 用正则表达式解析表格数据,c#,.net,regex,parsing,C#,.net,Regex,Parsing,我正在用C编写一个应用程序,它解析一些文本文件并从中获取信息。我需要解析下面这样的表格数据,并将信息填充到类的属性中 我对表和列标题没有问题。我还可以使用捕获组获取数据,但在某些情况下,某些值可能是空的(或者可能包含空格,如第4行中的Col6) 样本: =============================================================================== Table Header ==============================
===============================================================================
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)的character类中添加一个空格char时,它开始将两个连续的行匹配在一起。我需要逐行比赛。我该怎么做
第二个问题是,对于许多列,我需要“除空格外的任何字符”方法,并且我在捕获组中使用此模式:([\w\d-\.*.\\:\/\]+)
如果数据可能包含空格,我将向该模式添加一个空格字符。这是正确的方法吗?或者像这样的文本会有问题吗(例如,列不匹配)
谢谢这不能用正则表达式完成 为了解释原因,让我们看一下数据中的第二行:
Col1 Col2 Col3 Col4 Col5 Col6
-------------------------------------------------------------------------------
22 abc xyz 1 bla-bla-bla
您处理此案例的方式可以将“1”匹配为Col4,而将空Col5匹配为Col4。没有条件告诉正则表达式引擎“1”实际上是第5列
假设数据是固定长度的,我建议使用
至于你的第二个问题:
除了空格以外的任何字符=
[^]
使用或者您可以使用
\S
(除空格外的任何字符)两列之间是否有固定长度,或者是否有制表符分隔?我认为,每列的最大长度是固定的,所以我决定使用这种方法。谢谢你的帮助