我有以下情况
我必须匹配类似的东西
abc#(x,-12d)
or
abc#(x,-12d, 24d) etc.
这意味着最后一个参数是可选的。
我已经制作了正则表达式并且它可以工作,但由于我不知道如何制作可选的,因此我将使用两种不同的正则表达式。
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 次或 1 次”。因此,它使语句成为可选的。
您想在最后一个 ", 24d"存在时捕获它。您需要用 ? 包裹捕获“, 24d” 的内容性格。
这个正则表达式会做:
string regEx1 = @"^[a-zA-Z]*#\([A-Za-z0-9]+,[-|+]?\d+[dwmqy](,\s*[-|+]?\d+[dwmqy])?\)";
请注意,我添加了一个 \s*
来捕获 ,
之后的空格
关于c# - 如何在 C# 中制作可选参数正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4724835/