加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 类似Google的搜索查询标记化和字符串分割

发布时间:2020-12-15 04:31:09 所属栏目:百科 来源:网络整理
导读:我正在寻找类似于Google的搜索查询.例如,如果我有以下搜索查询: the quick "brown fox" jumps over the "lazy dog" 我想要一个包含以下令牌的字符串数组: thequickbrown foxjumpsoverthelazy dog 你可以看到,令牌用双引号保留空格. 我正在寻找一些例子,我
我正在寻找类似于Google的搜索查询.例如,如果我有以下搜索查询:
the quick "brown fox" jumps over the "lazy dog"

我想要一个包含以下令牌的字符串数组:

the
quick
brown fox
jumps
over
the
lazy dog

你可以看到,令牌用双引号保留空格.

我正在寻找一些例子,我可以如何在C#中做到这一点,最好不要使用正则表达式,但是如果这是最有意义的,那么最好的就是这样.

此外,我想知道如何扩展它来处理其他特殊字符,例如,在一个术语前面强制排除搜索查询等等.

解决方法

到目前为止,这似乎是RegEx的好候选人.如果它变得复杂得多,则可能需要一个更复杂的标记化方案,但是除非必要,否则您应该避免该路由,因为它显着地更多的工作. (另一方面,对于复杂的模式,正则表达式很快就变成一只狗,同样应该避免).

这个正则表达式应该可以解决你的问题:

("[^"]+"|w+)s*

这是一个C#使用示例:

string data = "the quick "brown fox" jumps over the "lazy dog"";
string pattern = @"(""[^""]+""|w+)s*";

MatchCollection mc = Regex.Matches(data,pattern);
foreach(Match m in mc)
{
    string group = m.Groups[0].Value;
}

这种方法的真正好处是可以轻松扩展,包括您的“ – ”要求,如下所示:

string data = "the quick "brown fox" jumps over " +
              "the "lazy dog" -"lazy cat" -energetic";
string pattern = @"(-""[^""]+""|""[^""]+""|-w+|w+)s*";

MatchCollection mc = Regex.Matches(data,pattern);
foreach(Match m in mc)
{
    string group = m.Groups[0].Value;
}

现在我讨厌阅读Regex和下一个人一样,但是如果你把它分开,这个很容易阅读:

(
-"[^"]+"
|
"[^"]+"
|
-w+
|
w+
)s*

说明

>如果可能匹配一个减号,其次是“随后的一切,直到下一个”>否则匹配一个“后面的一切,直到下一个”>否则匹配a – 后跟任何单词字符>否则可以匹配尽可能多的单词字符>将结果放在一个组中>吞下任何以下的空格字符

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读