7 个版本 (破坏性更新)
使用旧 Rust 2015
0.7.0 | 2020年12月19日 |
---|---|
0.6.0 | 2018年12月7日 |
0.5.0 | 2018年3月24日 |
0.4.1 | 2017年8月17日 |
0.2.0 | 2017年7月25日 |
#193 in 文本处理
23,038 个月下载
在 45 个crate中使用 (21 直接使用)
37KB
787 行
sublime_fuzzy
基于 Sublime Text 字符串搜索的模糊匹配算法。遍历搜索字符串中的字符并计算分数。
分数基于多个因素
- 单词开头 如
t
在some_thing
中获得加分 (bonus_word_start
) - 连续匹配 对每次连续匹配获得累积加分 (
bonus_consecutive
) - 在忽略大小写搜索中,与大小写匹配的匹配将获得加分 (
bonus_match_case
) - 两个匹配之间的距离将乘以
penalty_distance
惩罚并从分数中减去
默认评分配置为给单词开头分配大量权重。因此,模式 scc
将匹配 SoccerCartoonController,而不是 SoccerCartoonController。
匹配示例
使用默认权重。
模式 | 目标字符串 | 结果 |
---|---|---|
scc |
SoccerCartoonController |
SoccerCartoonController |
something |
some search thing |
some search thing |
用法
基本用法
use sublime_fuzzy::best_match;
let result = best_match("something", "some search thing");
assert!(result.is_some());
Match::continuous_matches
返回一个连续匹配的迭代器。基于这些,可以格式化输入字符串。
format_simple
提供简单的格式化,将匹配项包裹在标签中
use sublime_fuzzy::{best_match, format_simple};
let target = "some search thing";
let result = best_match("something", target).unwrap();
assert_eq!(
format_simple(&result, target, "<span>", "</span>"),
"<span>some</span> search <span>thing</span>"
);
可以调整不同因素的权重
use sublime_fuzzy::{FuzzySearch, Scoring};
// Or pick from one of the provided `Scoring::...` methods like `emphasize_word_starts`
let scoring = Scoring {
bonus_consecutive: 128,
bonus_word_start: 0,
..Scoring::default()
};
let result = FuzzySearch::new("something", "some search thing")
.case_sensitive()
.score_with(&scoring)
.best_match();
assert!(result.is_some())
注意: 以上示例中的模式(例如 'something'
)中的任何空白都将被删除。
文档
请参阅docs.rs上的文档。
依赖项
~165KB