包含空格的多个字符串的正则表达式

问题描述:

我需要一个正则表达式来过滤查询。例如,我得到一个查询输入如下。包含空格的多个字符串的正则表达式

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

你使用什么风味或正则表达式?

如果您的键/值对的值总是由只有一个字,这会做:

\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