在Regex可以做到这一点吗

本文关键字:这一点 Regex | 更新日期: 2023-09-27 18:02:13

这是需要检查的格式:

{low limit} - {high limit}Volts

{low limit} to {high limit}Volts

例如:

50 - 150Volts
50 to 150Volts

并且下限必须小于上限。前后允许有空格

如果可能的话,在Regex中,这将非常有帮助

在Regex可以做到这一点吗

可以检查字符串是否具有此格式。但检查第一个值是否低于第二个值是不可能的。

这是因为数字只是Regex的一个字符序列。

然而,如果您不局限于Regex,您可以使用Regex解析字符串,将每个数字放在一个组中。然后将组的值解析为整数,并在C#中进行比较。

(?<min>'d+) (-|to) (?<max>'d+)Volts

如果空格是强制性的,这可能是您的Regex。

if (int.Parse(match.Groups["min"].Value) < int.Parse(match.Groups["max"].Value))
{
    // ok
}

这展示了访问组、解析和比较。。。

([0-9]+)[ ]?('-|to)[ ]?([0-9]+)Volts

此正则表达式与您的示例相匹配。

您无法检查low是否=<在regex中处于高位,但您可以使用第一个和第三个捕获组来获取值并进行比较。

这个正则表达式应该是您所需要的:('d+)('s+(-|to)'s+)('d+)Volts。如果空格在文本中是强制性的而不是可选的,那么您可以简化它并用空格替换's+

Regex.Replace(str, @"('d+)'s*(?:-|to)'s*('d+)", delegate(Match m)
{
    // ... check also
    m.Groups[1].Value // 50
    m.Groups[2].Value // 150
    //([1] < [2])?
    ...
});