2010-04-02 198 views
2

如何將字符串「網               金額」匹配(淨和金額之間可以有任意數量的空格,包括零)與net amount?這兩個詞之間字符串匹配

空間可以是任何空白和兩個串的精確匹配應該在那裏。但淨金額(第一個帶空格的字符串)可以是任何字符串的一部分,如Rate Net AmountRate CommissionNet Amount.

匹配應該是不區分大小寫。

+1

請更具體 – Andrey 2010-04-02 11:16:38

+0

你是什麼意思「匹配」?你只是想檢查一場比賽是否存在?你想要比賽的指數?你想用別的東西替換這個字符串嗎? – 2010-04-02 11:18:15

+0

@Mark Byers,先生..我想檢查一下匹配是否存在? – Harikrishna 2010-04-02 11:20:39

回答

6

如果你只是要檢查是否存在匹配,使用IsMatch

using System; 
using System.Text.RegularExpressions; 

class Program 
{ 
    public static void Main() 
    { 
     string s = "Net  Amount"; 
     bool isMatch = Regex.IsMatch(s, @"Net\s*Amount", 
            RegexOptions.IgnoreCase); 
     Console.WriteLine("isMatch: {0}", isMatch); 
    } 
} 

更新:在您的意見,它聽起來就像你想要的字符串搜索只在運行時才知道。你可以嘗試動態構建正則表達式,例如這樣的事情:

using System; 
using System.Text.RegularExpressions; 

class Program 
{ 
    public static void Main() 
    { 
     string input = "Net  Amount"; 
     string needle = "Net Amount"; 

     string regex = Regex.Escape(needle).Replace(@"\ ", @"\s*"); 
     bool isMatch = Regex.IsMatch(input, regex, RegexOptions.IgnoreCase); 
     Console.WriteLine("isMatch: {0}", isMatch); 
    } 
} 
+0

@馬克拜爾斯,非常感謝你先生....而我現在真的是你的粉絲。 – Harikrishna 2010-04-02 12:25:55

+0

@馬克·拜爾斯先生,如果我們想匹配像買入賣出和買入賣出這樣的字符串,那麼我們該怎麼做呢? – Harikrishna 2010-04-03 10:08:41

+1

@Harikrishna:對於這個問題,恕我直言,這太離譜了。你應該創建一個新的問題。請記住包括非常明確的規格,示例輸入,示例輸出。當你想要比賽成功,並且你希望比賽失敗的時候,包括兩個例子。試圖首先自己解決問題,並將問題包含在問題中。顯示你的代碼失敗的地方和方式的例子。 – 2010-04-03 10:58:01

0

您可以使用正則表達式:Net.*Amount

using System.Text.RegularExpressions; 
Regex regex = new Regex("Net.*Amount"); 
String s = "Net  Amount"; 
Match m = emailregex.Match(s); 

// Now you have information in m about the matching string. 
+0

@Anders Abel,它會匹配所有以Net開頭的單詞嗎? – Harikrishna 2010-04-02 11:17:58

+0

是的,它會如果你使用。之前 *。點匹配任何字符,星號表示任何次數。如果您使用「Net + Amount」,則只有在單詞之間至少有一個空格(並且沒有其他字符)時纔會匹配。 – 2010-04-02 11:20:22

6

使用正則表達式。看一看在System.Text.RegularExpressions命名空間,即Regex類:

var regex = new RegEx("net(\s+)amount", RegexOptions.IgnoreCase); 
//     ^^^^^^^^^^^^^^^ 
//      pattern 

參數字符串就是所謂的正則表達式模式。正則表達式模式描述了什麼字符串會匹配它。它們用專門的語法表達。谷歌爲regular expressions,你應該找到大量有關正則表達式的信息。

用例:

bool doesInputMatch = regex.IsMatch("nET  AmoUNT"); 
//         ^^^^^^^^^^^^^^^^^ 
//          test input 
+0

爲什麼downvote?我不介意,但我總是願意讓自己更好(或者至少是我的回答)。 – stakx 2010-04-02 12:12:59

+0

我提高了你的回答,因爲在你發佈它和附加信息時這是一個很好的建議。但是,這個問題已經被大量編輯和澄清,以至於你的答案不能被視爲問題當前形式的正確答案。我可以想象,現在有人讀到這個問題可能會因爲這個原因而低估它。注意:我認爲這不應該因爲這個原因而被低估 - 我只是猜測爲什麼會這樣。 – 2010-04-02 12:24:04

+0

@Mark Byers,謝謝你的提示! – stakx 2010-04-02 12:58:18

2

您可以使用

Regex.IsMatch(SubjectString, @"net\s*amount", RegexOptions.Singleline | RegexOptions.IgnoreCase); 
+1

+1考慮區分大小寫。請注意,'RegexOptions.Singleline'在這裏是不必要的 - 它隻影響點'.',並且在正則表達式中沒有點。 – 2010-04-02 12:22:31