我有以下情况
我必须匹配像
这样的东西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的使用。
由于
答案 0 :(得分:5)
正则表达式中的?
字符表示“重复0或1次”。因此,它使语句可选。
你想捕捉它存在的最后一个“,24d”。你需要包装什么捕获“,24d”?字符。
这个正则表达式将会:
string regEx1 = @"^[a-zA-Z]*#\([A-Za-z0-9]+,[-|+]?\d+[dwmqy](,\s*[-|+]?\d+[dwmqy])?\)";
请注意,我在\s*
,
来捕获空格
答案 1 :(得分:0)
可选部分标有?
,不是吗?您已在[-|+]?
中使用过它。