只有当包含冒号时,正则表达式才会向后看

时间:2015-03-09 17:24:29

标签: c# regex

今天我使用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。

3 个答案:

答案 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

Demo

因此,匹配[DHMS]:或不以:开头的字边界。

此外,[1-9]+\d?对我来说非常可疑,因此我将其替换为[1-9][0-9]*。请注意,在.NET \d中,等同于[0-9],因为它还包含Unicode数字。