c# - 如何在 C# 中制作可选参数正则表达式

标签 c# regex

我有以下情况

我必须匹配类似的东西

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/

相关文章:

c# - LINQ 中的动态 where 条件

iphone - iPhone 中的密码正则表达式?

arrays - 新人需要帮助获得正确的正则表达式

c# - 使用正则表达式进行有限的字符串替换?

Javascript正则表达式加粗多个字符串

c# - 我是否使用 ref 正确传递我的参数?

c# - 如何在 asp.net c# 中调用 jquery 函数调用?

C# Process.exited 在窗口关闭之前不会被调用

c# - 为图像中的对象绘制边界框

Python 2 与 3 正则表达式的区别