我想要以下的.net正则表达式:
用户可以输入tcm:12312312-221231323
或tcm:23121231-23423423-34234234
除“tcm”和连字符之外的所有条目都是数字。将有一个或两个连字符。
答案 0 :(得分:4)
^tcm:\d{8}-(\d{9}|\d{8}-\d{8})$
那是tcm :(八位数) - (九位数)或tcm :(八位数) - (八位数) - (八位数)
^tcm:\d+(-\d+){1,2}$
如果您正在寻找tcm :(某些数字) - (某些数字)或tcm :(某些数字) - (某些数字) - (某些数字)
答案 1 :(得分:2)
尝试这个,需要两组或三组
tcm:\d+-\d+(-\d+)?
如果对数字的限制有限制,请尝试以下方法:
tcm:\d{4,8}-\d{4,8}(-\d{4,8})?
(其中4和8是每组的最小值和最大值)
答案 2 :(得分:0)
你的意思是:
TCM:[\ d - ] +
答案 3 :(得分:0)
好吧,数字中间的短划线不是数字......;)
以下是一些选项:
如果破折号是可选的:
^tcm:[\d\-]+$
如果破折号是可选的,但可能不是第一个或最后一个:
^tcm:\d[\d\-]*\d$
如果至少需要一个破折号:
^tcm:\d*-[\d\-]+$
如果至少需要一个短划线,但可能不会先发生或最后发生:
^tcm:\d+-[\d\-]*\d$
如果短划线是可选的,但可能不是先发生,也可能不发生或相邻:
^tcm:\d+(-\d+)*$
答案 4 :(得分:0)
我不清楚您是否要验证输入并只是匹配输入,或者您是否要提取数据。
如果您只需要匹配输入以验证它,那么:
^tcm:\d+(-\d+){1,2}$
只有在有2组或3组数字时才会匹配,不会少,不再有。
如果您需要考虑可能出现的空白,可以像这样修改正则表达式:
^tcm\s*:\s*\d+\s*(-\s*\d+){1,2}\s*$
如果您想提取每组数字:
在Perl中,只有当整个模式匹配时,才会使用包含2或3组数字的@result
数组(subject
字符串包含要提取数据的行从)。
my @result = $subject =~ /^tcm:(\d+)-(\d+)(?:-(\d+))?$/;
在C#中你可以做同样的事情:
MatchCollection results = null;
Regex r = new Regex(@"^tcm:(\d+)-(\d+)(?:-(\d+))?$");
results = r.Matches(subject);
if ((results.Count == 2) || ((results.Count == 3))) {
// use results.Item[] to access each group of digits
} else {
// The subject doesn't match
}