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

时间:2016-03-21 12:07:49

标签: regex

我需要一个正则表达式来过滤掉一个查询。例如,我得到一个查询输入如下。

state:CA AND country:US OR postalcode:8888

在这里,我需要根据"提取术语。 AND","或者" (任何情况)。有人可以提供正则表达式,我可以提取像#34;州:CA","国家:美国"等等?

我想考虑AND之前和之后的空格,OR,因为其他术语可能包含"和","或"作为字符串的一部分。

Eg: state:OR AND country:US

更新: 我尝试过这样的事情

\sAND\s|\sOR\s

有了这个,我可以找到模式" AND","或者"。但是,如何使它不区分大小写呢?

1 个答案:

答案 0 :(得分: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);