正则表达式,用于标识一般类型为<function name =“”>#(arg1,[arg2],[agr3] ....)</function>的函数

时间:2010-08-23 06:32:52

标签: regex c#-3.0

考虑以下

案例1: SDN#(X,)

案例2: SDN#(X,12)

案例3: SDN#(34,12)

案例4: CORR#(X,,)

案例5: CORR#(X,12,45)

案例6: CFH#(X,AVG)

这些都是某种自定义功能。

如何构建一个正则表达式,以识别给定文本是否满足函数要求

广义结构为&lt; FUNCTION NAME&gt;#(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

由于

3 个答案:

答案 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]*,?)*\)$/