2013-05-14 62 views
1

我從控制檯獲取三個參數時遇到問題。 例如,用戶輸入到控制檯,這樣行: '/ S:http://asdasd.asd/E:設備/ F:打造'String substring或reg expr

string params = Console.ReadLine(); // /s:http://asdasd.asd /e:device /f:create' 

我需要得到這些PARAMS

string server = ""; //should be "http://asdasd.asd" 
string entity = ""; //should be "device" 
string function = "" //should be "create" 

我無法理解怎麼做。請幫助我)

例如控制檯 http://d.pr/i/kTpX

+1

我會爲正則表達式投票 – Saravanan 2013-05-14 08:21:30

回答

1

使用本:

`(?<=/s:)[^ ]+` 
`(?<=/e:)[^ ]+` 
`(?<=/f:)[^ ]+` 
1

分割由空格字符,隨後在所述第一分割「:」。喜歡的東西:

string input = "/s:http://asdasd.asd /e:device /f:create"; 

string[] parameters = input.Split(' '); 

foreach (string param in parameters) 
{ 
    string command = ""; 
    string value = ""; 

    command = param.Substring(0, param.IndexOf(':')); 
    value = param.Substring(param.IndexOf(':') + 1); 
} 

// Results: 
// command: /s value: http://asdasd.asd 
// command: /e value: device 
// command: /f value: create 

有可能是libaries,可以幫助你,或者你可以選擇正則表達式。但在這種情況下它不是強制性的。顯然,如果輸入錯誤,應該有一些錯誤處理代碼,但我認爲你可以自己管理它。

+0

比regex,IMO更整潔,更可讀。 – anaximander 2013-05-14 08:46:43

+1

謝謝:)我喜歡正則表達式,但有許多情況下你可以不用,最終得到更多更乾淨的代碼。有些人似乎將它們用作一切的解決方案,所以我試圖證明大多數問題都可以通過簡單的字符串操作來解決。 – pyrocumulus 2013-05-14 09:11:26

0

這裏有一個正則表達式的例子,這是否和團體通過你所需要的:

/s:([^ ]{1,100}) /e:([^ ]{1,100}) /f:([^ ]{1,100}) 

此外,我推薦使用http://regexpal.com/學習如何創建這些。

編輯:這是一個非常具體的例子,沒有涵蓋所有可能的情況。在上面的網站中對不同的輸入進行測試以進行必要的更改。

0

你需要3個不同的正則表達式(至少我找不到常見的一個)這個過程。因爲http://摧毀這種情況下每一個正則表達式:)

string s = @"/s:http://asdasd.asd /e:device /f:create"; 

string reg1 = @"(?=/s:)[^ ]+"; 
string reg2 = "(?=/e:)[^ ]+"; 
string reg3 = "(?=/f:)[^ ]+"; 

Match match1 = Regex.Match(s, reg1, RegexOptions.IgnoreCase); 

if (match1.Success) 
{ 
    string key1 = match1.Groups[0].Value.Substring(3); 
    Console.WriteLine(key1); 
} 

Match match2 = Regex.Match(s, reg2, RegexOptions.IgnoreCase); 

if (match2.Success) 
{ 
    string key2 = match2.Groups[0].Value.Substring(3); 
    Console.WriteLine(key2); 
} 

Match match3 = Regex.Match(s, reg3, RegexOptions.IgnoreCase); 

if (match3.Success) 
{ 
    string key3 = match3.Groups[0].Value.Substring(3); 
    Console.WriteLine(key3); 
} 

輸出將是;

http://asdasd.asd 
device 
create 

這是DEMO

0

一個更簡單的解決辦法是:

(?<=\:)[^ ]+ 

這種單一的正則表達式將返回三組。