用单词和小数之间的空格组成一个组
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
我对正则表达式的概念并不陌生,但有时它的语法和语义让我感到困惑。我一直在尝试创建一个模式来识别
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