在单词和小数之间创建一个包含空格的组

时间:2017-08-29 19:12:12

标签: c# regex regex-group

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

的模式
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]*)

3 个答案:

答案 0 :(得分:2)

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

像这样([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)

答案 1 :(得分:1)

我可能在没有想到的情况下过早发布,我现在有以下表达式

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

唯一的问题是它有时包含我试图避免的空间,但我可以稍后修剪它们。很抱歉发布这么快!

答案 2 :(得分:0)

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