如何匹配表达式中的参数名称?

时间:2010-03-14 12:35:42

标签: c# regex

我有一组表达式,表示一些带有一些参数的公式。像:

[parameter1] * [parameter2] * [multiplier]

还有很多人喜欢这样。

我想使用正则表达式,以便我可以得到一个字符串列表(List<string>),其中包含以下内容:

  • [paramter1]
  • [paramter2]
  • [multiplier]

我不经常使用正则表达式;如果您已经使用过这样的东西,我将不胜感激,如果您可以分享。

谢谢!

3 个答案:

答案 0 :(得分:3)

这应该这样做:

\[\w+\]

使用.net:

string s = "[parameter1] * [parameter2] * [multiplier]";
MatchCollection matches = Regex.Matches(s, @"\[\w+\]");

您可能希望在此处使用捕获组:\[(\w+)\],因此您在Groups[1]上拥有参数名称。

答案 1 :(得分:2)

这取决于参数的外观。

正则表达式的一般形式为:

\[{something which matches parameter names}\]

如果参数名称只能包含字母,数字和下划线,那么您需要以下内容:

\[\w+\]

这将匹配包含至少一个字母,数字或下划线的参数名称。例如:

[parameter]
[parameter1]
[1st_parameter]
[10]
[a]
[_]

更常见的限制是接受包含至少一个字母,数字或下划线的参数名称,但必须以字母开头:

\[[a-zA-Z]\w*\]

示例包括:

[parameter]
[parameter1]
[first_parameter]
[a]

但不匹配:

[1st_parameter]
[10]
[_]

但是,您可能会认为它应匹配方括号之间的任何内容,并且任何内容都可以是参数名称(可能您希望稍后验证参数名称)

\[[^]]+\]

将匹配方括号之间的任何内容,只要它包含至少1个字符。

如果您还想允许空方括号(即匹配[]),那么您需要:

\[[^]]*\]

答案 2 :(得分:1)

正则表达式

\[[^]]*\]

将匹配方括号中的任何内容:

\[   the opening bracket;
[^]] anything but a closing bracket,
*        repeated zero or more times;
\]   the closing bracket

我不确定这是不是你要求的,但是......