考虑以下
案例1: SDN#(X,)
案例2: SDN#(X,12)
案例3: SDN#(34,12)
案例4: CORR#(X,,)
案例5: CORR#(X,12,45)
案例6: CFH#(X,AVG)
这些都是某种自定义功能。
如何构建一个正则表达式,以识别给定文本是否满足函数要求
广义结构为< FUNCTION NAME>#(arg1,[arg2],[agr3] ....)
e.g。 给定CORR,或者CORR#()它不是函数。
因为每个函数必须至少包含一个参数(这将是字母数字)。
到目前为止,我的方法是
Regex r = new Regex(@"([A-Z]+)[#]([A-Z a-z 0-9]+),([A-Z a-z 0-9]+),([A-Z a-z 0-9]+)");
Match m = r.Match(txtFunction.Text);
if (m.Success) MessageBox.Show("OK");
else MessageBox.Show("Not OK");
但它不起作用
我正在使用C#3.0
由于
答案 0 :(得分:0)
这是一次尝试(即使我不知道它是否在C#中工作):
[A-Z]+#\(([A-Za-z0-9]+,?)*,*\)
说明:使用CORR#(arg1, arg2, arg3)
[A-Z]+#
与函数名称匹配,此处为CORR#
\(
匹配左括号(
。请注意,我转发(
以告诉引擎不要将其作为分组构造。
([A-Za-z0-0]+,?)*
匹配arg1, arg2,
。请注意,由于,?
表示最后可能有,
,所以有点hacky,但这不是必需的。
,*
匹配“空逗号”。
\)
匹配右括号。请注意,我转发)
以告诉引擎不要将其作为分组构造。
答案 1 :(得分:0)
如果你的正则表达式中有无意义的空格(就像你有的那样),你必须为IgnorePatternWhitespace
指定RegexOptions
。
答案 2 :(得分:0)
我不知道具体的C#正则表达式风格,但这个适用于所有情况的PCRE:
/^[A-Z]+#\(([a-zA-Z0-9]*,?)*\)$/