Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex-多个匹配项、冒号和空格_Regex_Excel_Vba - Fatal编程技术网

Regex-多个匹配项、冒号和空格

Regex-多个匹配项、冒号和空格,regex,excel,vba,Regex,Excel,Vba,我试图让一些正则表达式工作,但在我的特定用例中有点失败 例如,给定以下字符串 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 在某些方面确实有效。正确地捕捉

我试图让一些正则表达式工作,但在我的特定用例中有点失败

例如,给定以下字符串

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)
      
      #包括
      本地$str='设备-1:P0\U节点0\U通道0\U Dimm0大小:32 GB速度:2133 MHz类型:DDR4'
      $r\u A=StringRegExp($str,([\w-]*\:)\s*(\w*\s |.*),3)
      控制台写入(_ArrayToString($r_A,@CR)和@crlf)
      
      太棒了,谢谢!我刚刚编辑了答案,删除了第二组比赛结束时的空格。答案被接受。由于6个字符的限制,我不得不用“use”编辑“may”。@CuttingWide:对不起,你是想编辑到
      ([^\s:]+):\s*(.*)\s*(?=[^\s:]+:|$)
      ?我编辑了答案。