如何在C#中创建可选参数Regular Expression

时间:2011-01-18 13:51:47

标签: c# regex

我有以下情况

我必须匹配像

这样的东西
abc#(x,-12d)

or

abc#(x,-12d, 24d) etc.

这意味着最后一个参数是可选的。

我已经制作了正则表达式并且它有效,但是因为我不知道如何制作可选项,所以我将使用两种不同的regExpression。

public static bool ValidFn(string input)
        {          
            string regEx1 = @"^[a-zA-Z]*#\([A-Za-z0-9]+,[-|+]?\d+[dwmqy],[-|+]?\d+[dwmqy]\)";
            string regEx2 = @"^[a-zA-Z]*#\([A-Za-z0-9]+,[-|+]?\d+[dwmqy]\)";
            Regex r1 = new Regex(regEx1);
            Regex r2 = new Regex(regEx2);
            Match m1 = r1.Match(input);
            Match m2 = r2.Match(input);
            if (m1.Success || m2.Success) return true;
            else return false;
        }

如何使regExp1成为可选项,以便我可以省去regExp2的使用。

由于

2 个答案:

答案 0 :(得分:5)

正则表达式中的?字符表示“重复0或1次”。因此,它使语句可选。

你想捕捉它存在的最后一个“,24d”。你需要包装什么捕获“,24d”?字符。

这个正则表达式将会:

string regEx1 = @"^[a-zA-Z]*#\([A-Za-z0-9]+,[-|+]?\d+[dwmqy](,\s*[-|+]?\d+[dwmqy])?\)";

请注意,我在\s*

之后添加了,来捕获空格

答案 1 :(得分:0)

可选部分标有?,不是吗?您已在[-|+]?中使用过它。