2012-02-15 131 views
0

如果你有這樣的:讀字符串中的字符串

foreach(string n in txtList) 
{ 
    Console.WriteLine(n); 
} 

輸出:

[HKEY_Something_Something\.abc] 
[HKEY_Something_Something\.defg] 
[HKEY_Something_Something\.ijklmn] 

如何獲得之間有什麼 「」和「]」?

+0

這取決於..有永遠只有一個點?一個反斜槓? – IanNorton 2012-02-15 10:14:37

+0

閱讀關於正則表達式 – 2012-02-15 10:15:21

回答

2

如果它總是遵循格式,改變你的代碼應該輸出w帽子你想要的:

foreach(string n in txtList) 
{ 
    int startindex = n.IndexOf(@"\.") + 2; 
    Console.WriteLine(n.Substring(startindex, n.Length-startindex-1)); 
} 
+0

簡單而有用:)謝謝! – 2012-02-15 10:33:30

0

嘗試

foreach(string n in txtList) 
    { 
     string str[] = n.Split('.'); 
     if (str.Length > 0) 
     { 
      string s = str[str.Length-1]; 
      Console.WriteLine(s.Substring(0, s.Length-1)); 
     } 
    } 
+0

@Oliver:str在這裏是一個數組... – 2012-02-15 10:33:57

0

您可以使用正則表達式:

var s = @"[HKEY_Something_Something\.abc]"; 
var result = Regex.Match(s, @"(?<=\.)[^]]*(?=]$)") 
// result == "abc" 

正則表達式的簡短解釋:

(?<=\.) - preceded by a dot 
[^]]* - anything which isn't a ']' 
(?=]$) - followed by a ']' and the end of the string 
0
var per = n.IndexOf("."); // may need to add +1 to get past . index. 
var len = n.IndexOf("]") - per - 1; 

var val = n.Substring(per, len); 
0

答案很簡單:

int dotPosition = n.LastIndexOf(".") + 1; // +1 because we start AFTER the dot. 
int bracketPosition = n.LastIndexOf("]"); // can do "n.Length - 2" too. 
Console.WriteLine(n.Substring(dotPosition, bracketPosition - dotPosition)); 

更復雜的答案:使用正則表達式。

+0

也可以!謝謝! :) – 2012-02-15 10:33:44

0

例如用正則表達式:

Match match = Regex.Match(n, @"\.(.*)\]"); 
    string result = match.Groups[1].Value;