正则expression式 – 多个匹配,冒号和空格

我试图得到一些正则expression式的工作,但在我的具体用例略有失败。

以下面的string为例

Device-1: P0_Node0_Channel0_Dimm0 size: 32 GB speed: 2133 MHz type: DDR4 

我想从这个string中提取信息,最好是这样的:

 Device-1: P0_Node0_Channel0_Dimm0 size: 32 GB speed: 2133 MHz type: DDR4 

所以我试了一下,testing了一些expression式

 (.*?):\s 

有些方面工作。 捕获第一个参数名称,但之后,与空间混乱。

 :\s(.*?)\s\w*?:!? 

虽然这捕获了第三个参数值中的空白空间,但它只给了我第一个和第三个值。 也没有参数名称。

有人有一个想法,我怎么能达到预期的行为?

注意:我在Excel VBA中这样做,不确定是否所有function都支持。

谢谢

你可以使用

 ([^\s:]+):\s*(.*?)\s*(?=[^\s:]+:|$) 

查看正则expression式演示

细节

  • ([^\s:]+) – 第1组:一个或多个不同于空格的字符和:
  • : – 冒号
  • \s* – 零个或多个空格
  • (.*?) – 第2组:除了换行字符以外的任何0+字符,直到第一次出现…
    • \s* – 零个或多个空格,跟随…
    • (?=[^\s:]+:|$) – 一个或多个不同于空格的字符和:或string的结尾

这是一个Autoit的例子:

 #include <Array.au3> Local $str = 'Device-1: P0_Node0_Channel0_Dimm0 size: 32 GB speed: 2133 MHz type: DDR4' $r_A = StringRegExp($str, '([\w-]*\:)\s*(\w*\s|.*)', 3) ConsoleWrite(_ArrayToString($r_A, @CR) & @crlf)