比较运算符后的float和ratio表达式的正则表达式

时间:2015-12-11 21:12:22

标签: c# regex

我需要验证一些具有以下结构的输入:

[<|>|<=|>=](optional) [integer value| float value| ratio value](required)

例如,允许使用这些值,=6, >=8.56, <8/4, 8.56

我想这样做,正则表达式@"^?<operator>(<|>|<=|>=)?(([\d]+)|([\d]+(.|/)[\d]+))$"无效。

1 个答案:

答案 0 :(得分:3)

这是一个正则表达式,它将验证字符串,就像您的示例字符串一样:

@"^(?<op><=|>=|[<>=])?(?<val>\d+(?:[./]\d+)?)(?:,\s*(?<op><=|>=|[<>])?(?<val>\d+‌​(?:[./]\d+)))*$"

请参阅regex demo

请注意,在.NET中,我们可以多次使用相同的组名,并且所有捕获都可以通过CaptureCollection(每个组)获得。

为了验证包含逗号+空格分隔的<operator>+<number/ratio>字符串的整个输入,您需要重复子模式。

解释

  • ^ - 字符串开头
  • (?<op><=|>=|[<>=])? - <=>=<>=
  • 出现1次或0次
  • (?<val>\d+(?:[./]\d+)?) - 一个或多个数字,可选地后跟一个点或/和一个或多个数字
  • (?:,\s*(?<op><=|>=|[<>])?(?<val>\d+‌​(?:[./]\d+)))* - 0个或更多个序列...
    • ,\s* - 逗号后跟0或更多空格
    • (?<op><=|>=|[<>])?(?<val>\d+‌​(?:[./]\d+) - 在模式开头使用的子模式
  • $ - 字符串结尾