Как сопоставить имена параметров в выражении? - PullRequest
2 голосов
/ 14 марта 2010

У меня есть набор выражений, представляющих некоторую формулу с некоторыми параметрами внутри. Как:

[parameter1] * [parameter2] * [multiplier]

И многим другим нравится это.

Я хочу использовать регулярное выражение, чтобы я мог получить список строк (List<string>), который будет содержать следующее:

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

Я не использую регулярные выражения так часто; если вы уже использовали что-то подобное, я был бы признателен, если бы вы могли поделиться.

Спасибо!

Ответы [ 3 ]

3 голосов
/ 14 марта 2010

Это должно сделать это:

\[\w+\]

Использование .net:

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

Вы можете использовать здесь группу захвата: \[(\w+)\], поэтому у вас есть имя параметра в Groups[1].

2 голосов
/ 14 марта 2010

Зависит от того, как выглядят параметры.

Общая форма регулярного выражения будет:

\[{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 символ.

Если вы также хотите разрешить пустые квадратные скобки (то есть совпадение []), то вам понадобится:

\[[^]]*\]
1 голос
/ 14 марта 2010

регулярное выражение

\[[^]]*\]

будет соответствовать чему-либо в квадратных скобках:

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

Я не уверен, что ты просил об этом, хотя ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...