2013-11-20 90 views
-2

我想的話下面的列表中查找單詞「金額」:正則表達式查找特定的字符串

WaterAmount 
DamageAmount 
AmountOwed 

我試圖用正則表達式,但下面不工作:

Regex.IsMatch(name, @"\Amount\") 

有人可以幫我弄清楚如何做到這一點?

謝謝。

更新:使用

代碼:

foreach (string name in Request.Form.AllKeys) 
     { 

      if (Regex.IsMatch(name, "Amount")) 
      { 
       Response.Write(Request.Form[name]); 
      } 
      else 
      { 
       Response.Write("Not working\n"); 
      } 

     } 
} 
+1

看起來像這甚至不需要任何正則表達式的東西。 –

+1

爲什麼你需要正則表達式?你可以做'foo.Contains(「金額」)' – DGibbs

+0

我試過包含,並沒有工作 –

回答

3

而是使用正則表達式,使用:

name.Contains("Amount") 

,應返回一個布爾值,以量是否是字符串中。

你不需要正則表達式這種情況下(有時這是很好的去避免不必要時)

爲其他人則建議,

name.IndexOf("amount", StringComparison.OrdinalIgnoreCase) >= 0; 

也可用於包括「數量」,「量」, 「量」 等

或者:

​​

我們只是車使IndexOf不發送'未找到'-1。

你可能不希望使用的原因:

name.ToLower().Contains("amount") 

是因爲它會與國際字符(重音等)的問題。 如果您傳遞的是可能有任何文本的變量,則可能會造成問題。 對於一個常量字符串的情況下,它可能會被罰款,但是,(雖然不是非常推薦)

編輯:

如果我理解正確的C#(不是我的專業,雖然我已經用它),這應該工作:

foreach (string name in Request.Form.AllKeys) 
{ 
    if (name.IndexOf("amount", StringComparison.OrdinalIgnoreCase) >= 0) 
    { 
     Response.Write(Request.Form[name]); 
    } 
    else 
    { 
     Response.Write("Not working\n"); 
    } 
} 

我在代碼中看到一個額外的大括號。那應該在那裏嗎?

+3

'name.IndexOf(「amount」,StringComparison.OrdinalIgnoreCase)> = 0'對於不區分大小寫的'Contains'更好。檢查[這個答案](http://stackoverflow.com/a/444818/393487) –

0
var index = name.IndexOf("Amount", 0, name.Length); 

這會讓你第一次出現index of。如果你想要所有這些,只需循環文本。

忽略區分大小寫;

var index = name.IndexOf("Amount", 0, StringComparison.OrdinalIgnoreCase); 

如果沒有匹配,IndexOf返回-1。

如果你只是想知道你的字符串是否在那裏,請使用.Contains()

1

我認爲你的方法是正確的。我會建議一個小的變化,它的工作...

Regex.IsMatch(name, @"Amount") 

好運!

相關問題