正则表达式 - 多个匹配,冒号和空格
问题描述:
我试图让一些正则表达式工作,但在我的具体使用情况下略有失败。正则表达式 - 多个匹配,冒号和空格
考虑以下字符串例如
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中这样做,不知道是否所有功能都支持。
感谢
答
您可以使用
([^\s:]+):\s*(.*?)\s*(?=[^\s:]+:|$)
详细
-
([^\s:]+)
- 第1组:一个或多个字符不是空白和:
其他 -
:
- 冒号 -
\s*
- 零个或多个空格 -
(.*?)
- 组2:任何0+字符比换行符字符其他最多的第一次出现...-
\s*
- 零以上空格的后边带有... -
(?=[^\s:]+:|$)
- 比空白和:
或字符串的结尾其他一个或多个字符
-
答
这是一个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)
最好的,谢谢! 我刚刚编辑答案,以删除第二组比赛结束时的空间。 接受的答案。 由于6个字符的限制,我必须使用“use”编辑“may”。 – CuttingWide
@CuttingWide:对不起,您的意思是编辑为'([^ \ s:] +):\ s *(。*?)\ s *(?= [^ \ s:] +:| $)'?我编辑了答案。 –