C#匹配带有可选参数的子字符串

时间:2013-04-15 16:13:46

标签: c# regex collections match

我想匹配这个:

01+WhATEver 02+0.1 03+12.1\r\n

或者

01+WhATEver 02+0.1\r\n

在我按任何顺序解析的字符串中出现如下

01+WhATEver 02+0.1 03+12.1\r\n01+WhATEver 02+0.1 03+12.1\r\n01+WhATEver 02+0.1 03+12.1\r\n

01-02是强制性的,03是可选参数。索引看起来像“01+”,后面跟一个减号。

01+WhATEver 02+-0.1\r\n

我能够解析强制索引和变量但不包括可选的索引和变量...因为如果缺少它将不匹配。

01\\+\\s*(?<1>[.0-9A-Za-z]*)\\s*02\\+\\s*(?<2>[.0-9]*)\\s*03\\+\\s*(?<3>[.0-9]*)\\s*

我需要的是一个正则表达式,它将与包含许多此类子串的字符串中的01-02索引或01-03匹配。

1 个答案:

答案 0 :(得分:1)

难道你不能让那个组可选吗?像这样:

"01\\+\\s*(?<1>[.0-9A-Za-z]*)\\s*02\\+\\s*(?<2>[.0-9]*)(\\s*03\\+\\s*(?<3>[.0-9]*)\\s*)?"
                                                       ^                              ^^

(我强调了我添加到正则表达式中的字符。)