【发布时间】:2011-04-25 19:57:27
【问题描述】:
我正在开发一个简单的小型搜索机制,我希望允许用户搜索带有空格的文本块。例如,用户可以搜索人名:
姓名:John Smith
然后我将"John Smith".Split(' ') 放入一个包含两个元素的数组{"John","Smith"}。然后,我首先返回与“John”和“Smith”匹配的所有记录,然后返回与"John" OR "Smith." 匹配的记录,然后不返回不匹配的记录。这不是一个复杂的场景,我已经完成了这部分工作。
我现在希望能够允许用户只返回匹配“John Smith”的记录
我想使用基本的引号语法进行搜索。因此,如果用户想要搜索“John Smith”或 Pocahontas,他们将输入:“John Smith”Pocahontas。术语的顺序绝对无关紧要; “约翰·史密斯”没有优先于风中奇缘,因为他排在第一位。
关于如何解析输入,我有两个主要思路。
A) Using regular expression then parsing stuff (IndexOf, Split)
B) Using only the parsing methods
我认为一个合乎逻辑的行动点是找到引号中的内容;然后将其从原始字符串中删除并将其插入到单独的列表中。然后从原始字符串中剩下的所有东西都可以在空间上拆分并插入到那个单独的列表中。如果有 1 个引号或奇数,则简单地将其从列表中删除。
如何在正则表达式中找到匹配项?我知道 regex.Replace,但我将如何遍历匹配并将它们插入到列表中。我知道使用 MatchEvaluator 委托和 linq 有一些巧妙的方法可以做到这一点,但我对 c# 中的正则表达式基本上一无所知。
【问题讨论】: