2011-07-12 58 views
1

我有一個文本字符串中花括號是這樣的:獲取符號數組

{field1}-{field}+{field3}Anthing{field4} 

從中我需要得到一個這樣的數組:

['field1', 'field2', 'field3', 'field4'] 

是否有一個在c#中使用正則表達式的方法嗎?

+0

將「+」分開並修剪每個項目的前導和尾隨支撐是否可以接受? –

+1

你是否也想'feild2'拼錯了?如果是這樣,那麼這可能是非常困難的; P – leppie

+0

@老人 - 你寫了一個評論刪除的答案:「分隔符可以是任何東西」。您應該編輯該問題以澄清該問題,並添加更好的示例。 – Kobi

回答

3

您可以使用分割和LINQ:

MatchCollection matches = Regex.Matches(s, @"\{(\w*)\}"); 
string[] words = matches.Cast<Match>() 
         .Select(m => m.Groups[1].Value) 
         .ToArray(); 

\w*將只匹配字母數字字符,你可能想:

string[] words = s.Split('+') 
        .Select(word => word.Substring(1, word.Length - 2)) 
        .ToArray(); 

或者,您可以使用一個簡單的正則表達式匹配{...}令牌將其替換爲[^}]*.*?

1

是這樣的? ↓

  static void Main(string[] args) 
    { 
     string from = "{field1}+{field2}+{field3}"; 
     string[] to = from.Split("{}+".ToCharArray() , StringSplitOptions.RemoveEmptyEntries).ToArray(); 

     foreach (var x in to) 
      Console.WriteLine(x); 

     Console.ReadKey(); 
    } 

編輯

  • 爲了解決這一問題 「{FIELD1} - {字段} + {字段3}參選{field4中}」

    static void Main(string[] args) 
    { 
        string f = "{field1}-{field}+{field3}Anthing{field4} "; 
        List<string> lstPattern = new List<string>(); 
        foreach (Match m in Regex.Matches(f, "{.*?}")) 
        { 
         lstPattern.Add(m.Value.Replace("{","").Replace("}","")); 
        } 
    
        foreach (var p in lstPattern) 
         Console.WriteLine(p); 
    
    }