2013-09-21 145 views
4

我目前正在使用asp.net和C#構建一個網頁。我無法解析用戶提供的字符串。例如,用戶提供了下面的字符串,我需要提取單引號或雙引號之外的單詞。有人可以幫我解決這個問題嗎?提前感謝你的幫助。正則表達式提取單引號或雙引號之外的字符串

"we run" live "experiments" inside and outside 'a lab' 
使用正則表達式

預期的結果是:

live 

inside 

and 

outside 
+0

這是否允許:''live''? –

回答

1

這將做到這一點。所有小組賽 '所享有' 匹配你想要什麼:

(?<unquote>[^"'\s]+)|(?:["][^"]+?["])|(?:['][^']+?[']) 

C#的測試代碼:

var matches = Regex.Matches(@"""we run"" live ""experiments"" inside and outside 'a lab'", @"(?<unquote>[^""'\s]+)|(?:[""][^""]+?[""])|(?:['][^']+?['])"); 
foreach(Match match in matches) 
{ 
    if(match.Groups["unquote"].Success) 
    { 
     Console.WriteLine(match.Groups["unquote"].Value.Trim()); 
    } 
} 

輸出:

現場

其中:

  • <unquote>把一個叫做所享有
  • ^"'\s方法相匹配的一切,是不是雙單引號或空間羣手段。
  • (?:["][^"]+?["])表示在引用下一個報價單內的所有內容。注意+?這樣就不會貪婪和?:這樣該組就不會被捕獲。單引號一樣。

這將使用空字符串「」和單引號嵌套在雙引號中的字符串。你想忽略撇號嗎?如果是的話,那麼你需要擴展正則表達式以允許'前面沒有空格:

(?<unquote>(?>[^"\s](?<!\s[']))+)|(?:["][^"]+?["])|(?:['][^']+?[']) 

祝你好運與你的現場實驗。

+0

它像一個魅力一樣工作。謝謝! – user2802962

1
var parts = Regex.Split(input, @"[""'].+?[""']") 
      .SelectMany(x => x.Split()) 
      .Where(s => !String.IsNullOrWhiteSpace(s)) 
      .ToList(); 

var parts = Regex.Split(input, @"[""'].+?[""']") 
      .SelectMany(x => x.Split(new char[]{' '}, StringSplitOptions.RemoveEmptyEntries)) 
      .ToList(); 
相關問題