2010-03-14 33 views
2

我有一組表達式來表示一些帶有一些參數的公式。像:如何匹配表達式中的參數名稱?

[parameter1] * [parameter2] * [multiplier] 

還有很多其他人喜歡這樣。

我想用正則表達式,這樣我可以得到一個字符串列表(List<string>),這將有內部的以下內容:

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

我不經常使用正則表達式;如果你已經使用過這樣的東西,我會很感激,如果你可以分享。

謝謝!

+0

請提供一些具體的例子。參數1 /參數2 /乘數允許使用哪些字符? – 2010-03-14 12:38:06

回答

3

這應做到:

\[\w+\] 

使用.NET:

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

您可能需要使用捕獲組在這裏:\[(\w+)\],所以你有Groups[1]參數的名稱。

+0

謝謝Kobi!我很感謝所有的答案,他們非常有用。但我完全需要你所描述的和.Net。謝謝。 – pencilCake 2010-03-14 18:19:59

1

正則表達式

\[[^]]*\] 

將匹配在方括號什麼:如果這就是你問什麼,但

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

我不知道......

+0

我懷疑括號是重點,而不是真正的字符串的一部分。 – kenny 2010-03-14 13:33:05

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個字符。

如果您還想允許空方括號(即匹配[]),那麼你會想:

\[[^]]*\] 
相關問題