我需要一个正则表达式来过滤掉一个查询。例如,我得到一个查询输入如下。
state:CA AND country:US OR postalcode:8888
在这里,我需要根据"提取术语。 AND","或者" (任何情况)。有人可以提供正则表达式,我可以提取像#34;州:CA","国家:美国"等等?
我想考虑AND之前和之后的空格,OR,因为其他术语可能包含"和","或"作为字符串的一部分。
Eg: state:OR AND country:US
更新: 我尝试过这样的事情
\sAND\s|\sOR\s
有了这个,我可以找到模式" AND","或者"。但是,如何使它不区分大小写呢?
答案 0 :(得分:0)
你使用什么口味或正则表达?
如果您的键/对值中的值始终只包含一个单词,则会执行以下操作:
\w+:\w+
测试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);