用单词和小数之间的空格组成一个组

Making a group with spaces between words and decimals

我对正则表达式的概念并不陌生,但有时它的语法和语义让我感到困惑。我一直在尝试创建一个模式来识别

Ambient Relative Humidity: 31.59

与分组

Ambient Relative Humidity (Group 1)

31.59 (Group 2)

但我还需要能够匹配诸如

之类的东西
Operator: Bob

与分组

Operator (Group 1)

Bob (Group 2)

Sensor Number: 0001

与分组

Sensor Number (Group 1)

0001 (Group 2)

这是我创建的当前模式,适用于涉及操作员和传感器编号的示例,但与第一个示例(环境湿度)不匹配

\s*([A-Za-z0-9]*\s*?[A-Za-z0-9]*)\s*:\s*([A-Za-z0-9]*)

可能是我发的太快了,我现在的表情如下

\s*([A-Za-z0-9]*\s*[A-Za-z0-9]*\s*[A-Za-z0-9]*)\s*:\s*([A-Za-z0-9.]*)

唯一的问题是它有时包含我试图避免的空格,但我可以稍后 trim 那些。抱歉这么快就发帖了!

您必须向正则表达式添加更多 space 分隔的关键部分。
此外,您必须在值中添加一个十进制数选项。

像这样([A-Za-z0-9]*(?:\s*[A-Za-z0-9]+)*)\s*:\s*((?:\d+(?:\.\d*)?|\.\d+)|[A-Za-z0-9]+)?

https://regex101.com/r/fl0wtb/1

已解释

 (                             # (1 start), Key
      [A-Za-z0-9]* 
      (?: \s* [A-Za-z0-9]+ )*
 )                             # (1 end)
 \s* : \s* 
 (                             # (2 start), Value
      (?:                           # Decimal number
           \d+ 
           (?: \. \d* )?
        |  \. \d+ 
      )
   |                              # or,
      [A-Za-z0-9]+                  # Alpha num's
 )?                            # (2 end)
var st = "Ambient Relative Humidity: 31.59 Operator: Bob Sensor Number: 0001";
var li = Regex.Matches(st, @"([\w]+?:)\s+(\d+\.?\d+|\w+)").Cast<Match>().ToList();

    foreach (var t in li)
    {
        Console.WriteLine($"Group 1 {t.Groups[1]}");
        Console.WriteLine($"Group 2 {t.Groups[2]}");
    }

    //Group 1 Humidity:
    //Group 2 31.59
    //Group 1 Operator:
    //Group 2 Bob
    //Group 1 Number:
    //Group 2 0001