Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#正则表达式文件解析测试_C#_.net_Regex_String - Fatal编程技术网

C#正则表达式文件解析测试

C#正则表达式文件解析测试,c#,.net,regex,string,C#,.net,Regex,String,我在请求社区的智慧。我正在做一个给我的测试。我使用的是C#,我需要读取包含商业航班信息的文本文件。该文本文件如下所示: 1 AA2401 F7 A4 Y7 B7 M7 H7 K7 /DFW A LAX 4 0715 0836 E0.M80 9 3:21 2 AA2421 F7 A1 Y7 B7 M7 H7 K7 DFWLAX 4 1106 1215 E0.777 7 3:09 3UA:US6352 B9 M9 H9 K0 /DFW 1 LAX

我在请求社区的智慧。我正在做一个给我的测试。我使用的是C#,我需要读取包含商业航班信息的文本文件。该文本文件如下所示:

 1   AA2401  F7 A4 Y7 B7 M7 H7 K7 /DFW A LAX 4  0715    0836  E0.M80 9 3:21 
 2  AA2421 F7 A1 Y7 B7 M7 H7 K7 DFWLAX 4  1106    1215  E0.777 7     3:09
 3UA:US6352  B9 M9 H9 K0 /DFW 1 LAX    1200  1448  E0.733       1:48
 4   AA2407  F7 A6 Y7 B7 M7 H7 K7 /DFW A LAX 4  0820    0936  E0.757 6 3:16 *
 5   UA 499  F7 Y9 B9 M9 H9 Q9 V9 /DFW B LAX 7  0840    0959  E0.319 4 3:19
 6   UA 448  M9 H9 Q9 V9 /DFW 1 LAX    1200  1448  E0.733 8     1:48 /
 7UA:US6376  B9 M9 H9 K9 /DFW 1 LAX    1315  1603  E0.735       1:48
 8  AA2883 F7 A6 Y7 B7 M7 H7 K7 DFWLAX 4  1215    1328  E0.757 9     3:13
 9UA:US6440  B9 M9 H9 K9 /DFW 1 LAX    1445  1732  E0.735       1:47 /E
10   UA1584  M9 H9 Q9 V9 /DFW   LAX    1445  1732  E0.735 9     1:47
11   UA1082  M9 H9 Q9 V9 /DFW   LAX    1450  1735  E0.735 8     1:45
12   UA 662  M9 H9 Q9 V9 /DFW 1 LAX    1315  1603+1E0.735 N     1:48 /E
13   DL 333  F9 A9 Y9 B9 M9 H9 Q9 /DFW E LAX 5  0930    1046  E0/738 8 3:16
14   AA2413  F7 A7 Y7 B7 M7 H7 K7 /DFW A LAX 4  1008    1124  E0.757 8 3:16
15  DL1435 F9 A9 Y9 B9 M9 H9 Q9 DFWLAX 5  1130    1250-1E0/738 9     3:20
16UA:US6392  B9 M9 H9 K9 /DFW   LAX    1450  1735  E0.735       1:45
17   F9 436  B4 Y4 K4 M4  DFW 1 LAX    1525  1810+1E0.733       1:45 *
18   HP 497  W4 B7 Q7 L7  DFW 1 LAX    1700  1943+1E0.319 N     1:43
给定此文本文件,信息包含以下列:

LineNumber
Carrier
OperatingCarrier
FlightNumber
Classes
DepartureAirport
ArrivalAirport
DepartureTime
ArrivalTime
ArrivalTimeShift
Equipment
Ontime
Duration
我还举了两个例子:

For Line 3:
3          LineNumber
UA        Carrier
US        OperatingCarrier
6352     FlightNumber
BMHK   Classes
DFW      DepartureAirport
LAX     ArrivalAirport
1200     DepartureTime
1448     ArrivalTime
           ArrivalTimeShift
733       Equipment
           Ontime
1:48      Duration


For line 18:
18         LineNumber
HP        Carrier
           OperatingCarrier
497       FlightNumber
WBQL   Classes
DFW      DepartureAirport
LAX     ArrivalAirport
1700     DepartureTime
1943     ArrivalTime
+1        ArrivalTimeShift
319       Equipment
N          Ontime
1:43      Duration
我还被指示使用正则表达式。由于每一行的差异,尤其是空格的差异,试图解析这一点是一场噩梦。我只是想知道如何开始对付这头野兽。我知道我可以去掉/、和*


谢谢。

给你答案是不公平的,但我相信,在这个社区,一些温和的指导是可以的……
你对正则表达式了解多少?你有没有看过一些简单的例子,说明你可以用它们解析出什么?
在文本文件中可以看到哪些模式?是的,台词中有奇怪的变化,但原因是有韵律的。我们的人脑运算和模式识别速度如此之快,以至于我们忘记了下面有一个简单的算法。只需分别处理每个领域。
如果你还没有学会如何用C#来做正则表达式,那就从学习开始吧。(一旦你掌握了基本知识,这就不难了,但是正则表达式绝对是一个新概念,如果你以前没有过的话,可能需要一点时间才能让你的头脑清醒过来。)

我希望这能有所帮助——让我们知道您到目前为止尝试了什么。

一步一步来。例如:

`^`         start of line
` *`        possible leading spaces
`(\d+)`     capture the LineNumber
` *`        possible spaces
`([A-Z]+)`  capture the Carrier

等等。

我正在做一个给我的测试:在这里寻找答案叫做作弊!除了Chief先生的评论之外,如果你被允许在测试中获得外部帮助,你仍然应该首先告诉社区你到目前为止已经尝试了什么,而不仅仅是给我们你的测试问题。你如何分析行号与运营商代码的对比情况,当运营商像Pinnacle谁是9E或(Colgan,9L)为DL操作航班?我的想法是在每个字段之间使用2个空格作为分隔符。我将一行中有3个或更多空格的任何位置替换为2个空格。还使用正则表达式去除我知道不需要的特殊字符(即/,:,*)。有没有比在字符串中循环查找第一个非数字索引更简单的方法?这样我就可以通过找到不是数字的第一个字符来解析行号了。那么
199E:DL2187
,是不是第199行的载波代码E?不。这是德尔塔金属公司19号线运营商代码9E(顶峰)。谢谢,我真的在寻求指导。我知道如何写正则表达式。我真的没什么问题。我不知道如何使用正则表达式捕获字符串的某些部分。正如@MRAB所建议的,我可以一件一件地处理,如何使用正则表达式提取这些部分?请查看上的示例部分,快速了解如何使用C#regex提取字符串。运营商的IATA代码是
[a-Z0-9]{2}
。我实际上接受了您的建议,只是一步一步地执行。这是我见过的最卑鄙的正则表达式之一。正则表达式中的组功能正是我所缺少的。这使得解析出来非常容易。我还使用了Espresso regex工具来创建它。这非常有帮助。