#range #query #content #iterator #within #finds #string

查询范围

此包提供了一个迭代器,用于在搜索内容中查找查询的所有范围。

1 个不稳定版本

0.1.0 2020 年 10 月 26 日

#7#finds

GPL-2.0-or-later

24KB
318 行 (代码行)

查询范围

此包提供了一个迭代器(符合 Iterator),用于在搜索内容中查找查询的所有范围。迭代器可以被收集到一个 Vec<Range<usize>>、映射或手动使用(通过调用 next() 方法,直到没有更多结果返回)。

这还导出了一些用于字符串的范围实用工具。

用法

将此添加到您的 Cargo.toml 中

[dependencies]
query-range = "0.1.0"

迭代

用作迭代器

 use query_range::QueryRangeItr;

let query = "needle";
let content = "haystackneedlehaystackneedlehaystack";
let mut occurrences = QueryRangeItr::new(query, content);
while let Some(next) = occurrences.next() {
    println!("{}", &content[next]);
}

收集到数组中

这会将所有范围收集到一个字符串索引数组中。

use query_range::QueryRangeItr;

let query = "needle";
let content = "haystackneedlehaystackneedlehaystack";
let mut occurrences = QueryRangeItr::new(query, content);
let needles: Vec<String> = occurrences.map(|range| String::from(&content[range])).collect();

收集到字符串中

这会将所有范围收集起来,并从原始内容中提取那些索引处的字符串。

use query_range::QueryRangeItr;

let query = "needle";
let content = "haystackneedlehaystackneedlehaystack";
let mut occurrences = QueryRangeItr::new(query, content);
let needles: Vec<String> = occurrences.collect_strings();

转换查询

如果最终目标是转换找到的所有查询,这是一个方便的静态方法来实现。

use query_range::QueryRangeItr;

let query = "needle";
let content = "haystackneedlehaystackneedlehaystack";
let result = QueryRangeItr::transform_query(query, content, |it| it.to_uppercase());

重新组合内容

如果您还需要转换非查询内容,可以使用此静态方法。

use query_range::QueryRangeItr;
use query_range::utility::to_title_case;

let query = "needle";
let content = "haystackneedlehaystackneedlehaystack";
let result = QueryRangeItr::transform_all(
    query,
    content,
    |it| it.to_uppercase(), // query transform
    |it| to_title_case(it), // non-query transform
);

依赖项

~475KB