正则表达与群组?

时间:2017-03-09 17:14:38

标签: .net regex

在.NET中,我试图将这些字符串解析为数字组。 “a”和“b”是可选的(但是固定的)字母:

111a222b333   --> groups: num1=111, num2=222, num3=333
111           --> groups: num1=111
111b333       --> groups: num1=111, num3=333
b333          --> groups: num3=333

我尝试过的正则表达式包括:

(?<num1>\d+)?a?(?<num2>\d+)?b?(?<num3>\d+)?
(?<num1>\d+)*.*(a(?<num2>\d+))*.*(b(?<num3>\d+))*

但他们没有工作。有什么建议吗?

3 个答案:

答案 0 :(得分:2)

您需要将?(零或一个)组合在组中(而不是捕获组)。

因此转向:

a?(?<num2>\d+)

分为:

(?:a(?<num2>\d+))?

完整的正则表达式将是:

(?<num1>\d+)?(?:a(?<num2>\d+))?(?:b(?<num3>\d+))?

这是live preview

正如你所看到的那样,它正确地产生了:

答案 1 :(得分:1)

(?<num1>\d*)?a?(?<num2>\d*)?b?(?<num3>\d*)

你很接近,只需要数字不在那里就可以了。

Preview

答案 2 :(得分:-1)

这是一篇类似的帖子:Regular expression to match any character being repeated more than 10 times

/([0-9])\1*/应该与您要查找的内容相匹配,因为在.NET中,默认情况下量词是贪婪的。