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 文本处理

Download history 5091/week @ 2024-04-22 5084/week @ 2024-04-29 4212/week @ 2024-05-06 5797/week @ 2024-05-13 4260/week @ 2024-05-20 5223/week @ 2024-05-27 4954/week @ 2024-06-03 4506/week @ 2024-06-10 3763/week @ 2024-06-17 4784/week @ 2024-06-24 5116/week @ 2024-07-01 5463/week @ 2024-07-08 6180/week @ 2024-07-15 4917/week @ 2024-07-22 5196/week @ 2024-07-29 6170/week @ 2024-08-05

23,038 个月下载
45 个crate中使用 (21 直接使用)

自定义许可证

37KB
787

sublime_fuzzy sublime_fuzzy on crates.io

基于 Sublime Text 字符串搜索的模糊匹配算法。遍历搜索字符串中的字符并计算分数。

分数基于多个因素

  • 单词开头tsome_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