1 个不稳定版本
0.1.0 | 2020 年 10 月 26 日 |
---|
#7 在 #finds
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