2010-03-14 2 views
2

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

[parameter1] * [parameter2] * [multiplier] 

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

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

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

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

Спасибо!

+0

Просьба представить конкретные примеры. Какие символы допускаются в параметре1/параметр2/множитель? –

ответ

3

Это следует сделать это:

\[\w+\] 

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

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

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

+0

Спасибо, Коби! Я ценю все ответы, они были весьма полезны. Но мне нужно именно то, что вы описали, и для .Net. Благодарю. – pencilCake

1

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

\[[^]]*\] 

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

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

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

+0

Я подозреваю, что скобки были акцентом, а не частью настоящей строки. – kenny

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 символа.

Если вы хотите, чтобы пустые квадратные скобки (т.е. матч []), то вы хотите:

\[[^]]*\]