正则表达式 - 多个匹配,冒号和空格

时间:2017-08-29 08:04:59

标签: regex excel vba

我正在尝试使用一些RegEx,但在我的特定用例中略有失败。

给出以下字符串,例如

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

我想从这个字符串中提取信息,最好是这样:

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

所以我尝试了一下并测试了一些表达式

(.*?):\s

在某些方面是否有效。正确捕获第一个参数名称,但之后会与空格混淆。

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

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

有人知道如何实现预期的行为吗?

注意:我在Excel VBA中执行此操作,不确定是否支持所有功能。

由于

2 个答案:

答案 0 :(得分:1)

您可以使用

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

请参阅regex demo

<强>详情

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

答案 1 :(得分:0)

这是一个自动示例:

#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)