需要捕获单个字符,但忽略数字

Mic*_*ick 3 regex

我正在解析航班信息.

这是示例数据:

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,单个数字或空白.只应捕获布尔值.

Mar*_*der 6

首先,你混淆了交替和字符类的概念,[Y|N]将匹配3个不同的角色:Y|N.使用(...)或遗漏管道.

其次你?在角色类之后的双重并没有真正做任何事情.第三,最后,如果找到数字,则只匹配连续的空格.但是如果没有数字,则最后一个?将忽略子模式,因此也不允许使用空格.

最后,\w不匹配:.

试试这个:

@"^.{3}(\d{3})\s?(?:([NY])|\d)\s+(\d:\d\d)"
Run Code Online (Sandbox Code Playgroud)

您还应该考虑.将开头的重复限制为更精确的字符类(即\w{2}\.,但我不知道那里的可能性).