我正在尝试使某些正则表达式工作,但在我的特定用例中略有失败。
给定以下字符串,例如
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(.*?)sw*?:!?
尽管这在第三个参数值中捕获了空白空间,但它仅给了我第一个和第三个值。也没有参数名称。
有人知道我如何实现预期的行为?
注意:我正在Excel VBA中这样做,不确定是否支持所有功能。
谢谢
您可以使用
([^s:]+):s*(.*?)s*(?=[^s:]+:|$)
请参阅Regex Demo
详细信息
-
([^s:]+)
-第1组:Whitespace和:
以外的一个或多个字符 -
:
-a colon -
s*
-零或更多的whitespaces -
(.*?)
-第2组:除了line Break Chars以外的任何0 字符,直到第一次出现...-
s*
-随后是... -
(?=[^s:]+:|$)
-除whitespace和:
以外的一个或多个字符或字符串结束
-
这是一个自动示例:
#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)