我正在尝试使用一些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中执行此操作,不确定是否支持所有功能。
由于
答案 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)