我正在解析航班信息.
这是示例数据:
E0.777 7 3:09
E0.319 N 1:43
E0.735 8 1:45
E0.735 N 1:48
E0.M80 9 3:21
E0.733 1:48
Run Code Online (Sandbox Code Playgroud)
我需要填充这样的字段:
Equipment: 735
On Time: N
Duration: 1:48
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是捕获Y或N字符但忽略单个数字,然后捕获持续时间.
这是我试过的表达式:
@"^.{3}(.{3})\s?([N|Y]?)?(?:[0-9]\s+)?(\w{4})"
Run Code Online (Sandbox Code Playgroud)
编辑:我更新了示例数据以澄清我的问题.设备并不总是三位数,可以是一个字符和两位数.设备和持续时间之间的数据可以是布尔N或Y,单个数字或空白.只应捕获布尔值.
首先,你混淆了交替和字符类的概念,[Y|N]将匹配3个不同的角色:Y或|或N.使用(...)或遗漏管道.
其次你?在角色类之后的双重并没有真正做任何事情.第三,最后,如果找到数字,则只匹配连续的空格.但是如果没有数字,则最后一个?将忽略子模式,因此也不允许使用空格.
最后,\w不匹配:.
试试这个:
@"^.{3}(\d{3})\s?(?:([NY])|\d)\s+(\d:\d\d)"
Run Code Online (Sandbox Code Playgroud)
您还应该考虑.将开头的重复限制为更精确的字符类(即\w{2}\.,但我不知道那里的可能性).