使用正则表达式
今天在项目中处理多字段搜索的问题时,需要从用户输入结果中提取字段名称和字段值,使用了下正则表达式,果然很强大:不仅验证了输的格式,还能根据模式中设置的分组提取字段值:
先写个单元测试验证下:
1.验证输入格式
View Code
1 [Fact] 2 public void RegexTest6() 3 { 4 var pattern = "^\\[(\\w+)[:]{1}(\\S+)\\]$"; 5 string test = "[hello:world]"; 6 string test1 = "[,:123]"; 7 string test2 = "123:23"; 8 string test3 = "123:world]"; 9 string test4 = "[hello:123"; 10 string test5 = "[1231]"; 11 12 Regex.IsMatch(test, pattern).ShouldBe(true); 13 Regex.IsMatch(test1, pattern).ShouldBe(false); 14 Regex.IsMatch(test2, pattern).ShouldBe(false); 15 Regex.IsMatch(test3, pattern).ShouldBe(false); 16 Regex.IsMatch(test4, pattern).ShouldBe(false); 17 Regex.IsMatch(test5, pattern).ShouldBe(false); 18 }
2.根据指定的分组格式提取字段值
View Code
1 [Fact] 2 public void RegexTest7() 3 { 4 var pattern = "^\\[(?<field>\\w+)[:]{1}(?<value>\\S+)\\]$"; 5 6 var test1 = "[hello:world]"; 7 8 Regex regex = new Regex(pattern); 9 Regex.IsMatch(test1, pattern).ShouldBe(true); 10 11 var matches = regex.Match(test1); 12 matches.Groups["field"].Value.ShouldBe("hello"); 13 matches.Groups["value"].Value.ShouldBe("world"); 14 }
总结:和字符串的解析比起来,正则表达式 真的很强大。处理字符串时记得用正则~