具有非均匀 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
我正在尝试解析“显示界面简介”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