具有非均匀 space 组的正则表达式捕获组

Regex capture group with non-uniform space group

我正在尝试解析“显示界面简介”Comware 开关命令的输出,以使用 RegEx 将其转换为 CSV 文件。此命令使用以下格式打印:

Interface            Link Speed   Duplex Type PVID Description 
BAGG51               UP   4G(a)   F(a)   T    1                      
FGE1/0/42            DOWN auto    A      T    1              ###   LIVRE   ###
GE6/0/20             UP   100M(a) F(a)   A    1        LIVRE (MGMT - [WAN8-P8] 

这对我来说似乎很有挑战性,因为无论我尝试哪种 RegEx,它都不能正确处理只有一个 space 他们之间。我也找不到正确处理最后一个字段的方法,它可以包含一个或多个 space,但是在我尝试过的大多数 RegEx 中,它为每个 space 创建一个单独的捕获组而不是正确处理它的文本内容。

我也试过无数种方法去尝试解析,在网上和Whosebug社区都找不到太多关于解析非uniform列的内容。

我需要将其解析为以下格式,每行 7 个捕获组,并尊重行尾:

BAGG51;UP;4G(a);F(a);T;1
FGE1/0/42;DOWN;auto;A;T;1;###   LIVRE   ###
GE6/0/20;UP;100M(a);F(a);A;1;LIVRE (MGMT - [WAN8-P8] 

到目前为止我发现的最成功的 RegEx 是:^(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+) 使用 Notepad++ 将其替换为 ;;;;;; 但它没有正确处理“描述”字段,该字段可能为空。

以下模式似乎在这里起作用:

^(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)(?:[ ]+(.*))?

这遵循您的模式,具有六个强制捕获组,然后是一个可选的第七个捕获组。模式末尾的 (?:[ ]+(\S+))? 匹配一个或多个空格后跟内容。请注意,此模式应在多行模式下使用。

这是一个有效的demo