在.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+))*
但他们没有工作。有什么建议吗?
答案 0 :(得分:2)
您需要将?
(零或一个)组合在组中(而不是捕获组)。
因此转向:
a?(?<num2>\d+)
分为:
(?:a(?<num2>\d+))?
完整的正则表达式将是:
(?<num1>\d+)?(?:a(?<num2>\d+))?(?:b(?<num3>\d+))?
这是live preview。
正如你所看到的那样,它正确地产生了:
答案 1 :(得分:1)
答案 2 :(得分:-1)
这是一篇类似的帖子:Regular expression to match any character being repeated more than 10 times
/([0-9])\1*/
应该与您要查找的内容相匹配,因为在.NET中,默认情况下量词是贪婪的。