今天我使用c# Regex.IsMatch 功能来匹配键:值格式。
我有一些代码检查字符串格式是否为: key:value (例如:H:15)。
我今天使用的正则表达式模式是: [D,H,M,S]:[1-9] + \ d?
我要添加默认密钥的选项,当输入 15 时,我想将其视为: H:15
所以,我需要改进我的正则表达式以支持键:值或仅值(不带冒号), H:15 是好的并且 15 也很好
我尝试使用或正则表达式条件(|),例如:([D,H,M,S]:[1-9] + \ d?)|( [1-9] + \ d?)
但现在它匹配更多的想法,如:1 和 H:01 ,这对我来说是糟糕的输入。
我尝试使用lookbehind regex但没有成功
非常感谢任何帮助,
Nadav。
答案 0 :(得分:0)
好像你想要这样的东西,
@"^(?:[DHMS]:)?[1-9]\d*$"
[DHMS]
匹配给定列表中的单个字符。非捕获组之后的?
会将关键部分转换为可选部分。 \d*
匹配零个或多个数字字符。
答案 1 :(得分:0)
看起来Avinash只是打败了我,但我在这个表达中增加了单词边界,这在测试中效果很好。
\b(?<=[DHMS]:)?[1-9]\d*\b
答案 2 :(得分:0)
这应该可以解决问题:
\b(?:[DHMS]:|(?<!:))[1-9][0-9]*\b
因此,匹配[DHMS]:
或不以:
开头的字边界。
此外,[1-9]+\d?
对我来说非常可疑,因此我将其替换为[1-9][0-9]*
。请注意,在.NET \d
中,不等同于[0-9]
,因为它还包含Unicode数字。