C#正则表达式文件解析测试
我在请求社区的智慧。我正在做一个给我的测试。我使用的是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
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工具来创建它。这非常有帮助。