我需要验证一些具有以下结构的输入:
[<|>|<=|>=](optional) [integer value| float value| ratio value](required)
例如,允许使用这些值,=6, >=8.56, <8/4, 8.56
。
我想这样做,正则表达式@"^?<operator>(<|>|<=|>=)?(([\d]+)|([\d]+(.|/)[\d]+))$"
无效。
答案 0 :(得分:3)
这是一个正则表达式,它将验证字符串,就像您的示例字符串一样:
@"^(?<op><=|>=|[<>=])?(?<val>\d+(?:[./]\d+)?)(?:,\s*(?<op><=|>=|[<>])?(?<val>\d+(?:[./]\d+)))*$"
请参阅regex demo
请注意,在.NET中,我们可以多次使用相同的组名,并且所有捕获都可以通过CaptureCollection
(每个组)获得。
为了验证包含逗号+空格分隔的<operator>+<number/ratio>
字符串的整个输入,您需要重复子模式。
解释:
^
- 字符串开头(?<op><=|>=|[<>=])?
- <=
或>=
或<
,>
或=
(?<val>\d+(?:[./]\d+)?)
- 一个或多个数字,可选地后跟一个点或/
和一个或多个数字(?:,\s*(?<op><=|>=|[<>])?(?<val>\d+(?:[./]\d+)))*
- 0个或更多个序列...
,\s*
- 逗号后跟0或更多空格(?<op><=|>=|[<>])?(?<val>\d+(?:[./]\d+)
- 在模式开头使用的子模式$
- 字符串结尾