2016-03-21 268 views
-3

我需要一個正則表達式來過濾查詢。例如,我得到一個查詢輸入如下。包含空格的多個字符串的正則表達式

state:CA AND country:US OR postalcode:8888 

在這裏,我需要根據「AND」,「OR」(任何情況)提取術語。有人可以提供正則表達式,我可以提取諸如「狀態:CA」,「國家:美國」等字樣嗎?

我想考慮AND和OR之前和之後的空格,因爲其他術語可能包含「和」,「或」作爲字符串的一部分。

Eg: state:OR AND country:US 

更新: 我已經試過這樣的事情

\sAND\s|\sOR\s 

有了這個,我能找到的模式 「AND」, 「OR」。但是,如何使其不區分大小寫?

+1

請分享您的嘗試。 – Maroun

回答

0

你使用什麼風味或正則表達式?

如果您的鍵/值對的值總是由只有一個字,這會做:

\w+:\w+ 

測試它here

enter image description here


更新: 因爲你的價值只由多個單詞組成,我想你應該分裂成字符串鍵/值對,而不是使用正則表達式的。

這裏是你如何能做到這一點的的JavaScript

var s = 'state:New York AND country:US OR postalcode:8888' 
    var dataBlocks = s.replace(/AND|and|And|OR|Or/g, '|').split('|') 
    for(var i = 0; i < dataBlocks.length; i++) dataBlocks[i] = dataBlocks[i].trim() 

//your resulting array would like like 
//Array [ "state:New York", "country:US", "postalcode:8888" ] 

同樣的解決方案,在C#:

Regex r = new Regex(@"AND|and|And|OR|Or"); 
      var s = "state:New York AND country:US OR postalcode:8888"; 

      var keyValuePairs = r.Replace(s, "|").Split(new char[] { '|' }).Select(z => 
      { 
       var keyValue = z.Trim().Split(new char[] { ':' }); 
       return new KeyValuePair<string, string>(keyValue.FirstOrDefault(), keyValue.LastOrDefault()); 
      }); 

      foreach (var keyValuePair in keyValuePairs) 
       Console.WriteLine("Key: {0}\tValue:{1}", keyValuePair.Key, keyValuePair.Value); 
+0

感謝您的回覆。這些工具非常適合測試。您提供的正則表達式在有空格或任何其他特殊字符的情況下不起作用。 (州:紐約和國家:美國)或郵政編碼:8888-121 – Manohar

+0

正則表達式(你在哪裏使用)的味道是什麼? javascript? C# ? – Veverke

+0

在這種情況下,看起來像你不需要正則表達式,而是簡單地通過*和/或*分割字符串。 – Veverke

相關問題