3个版本
0.1.2 | 2024年7月22日 |
---|---|
0.1.1 | 2024年7月8日 |
0.1.0 | 2024年7月8日 |
#271 in 解析工具
每月447次下载
17KB
212 代码行
range-parser
关于range-parser
range-parser是一个简单的Rust包,用于将文本表示的范围(例如 1-3,5-8
、1,3,4
、1-5
)解析为包含该范围所有项的Vector。
开始使用
-
将
range-parser
添加到您的Cargo.toml
range-parser = "0.1"
-
从str解析范围
let range_str = "1-3,5-8"; let range: Vec<u64> = range_parser::parse(range_str).unwrap(); assert_eq!(&range, &[1, 2, 3, 5, 6, 7, 8]);
支持类型
range-parser支持任何类型的数字原语。
为自定义类型提供的range-parser
只要它们满足以下特质约束,就可以扩展range-parser以支持自定义类型: T: FromStr + Add<Output = T> + PartialEq + PartialOrd + Unit + Copy,
。
这需要您实现这个库公开的特质 Unit
。
特质 Unit 定义如下
pub trait Unit {
fn unit() -> Self;
}
并且应返回类型的基数单位,对于数字应该是 1
。
示例
解析带有短横线的范围
let range: Vec<u64> = range_parser::parse("1-3").unwrap();
assert_eq!(range, vec![1, 2, 3]);
解析带有逗号的范围
let range: Vec<u64> = range_parser::parse("1,3,4").unwrap();
assert_eq!(range, vec![1, 3, 4]);
解析混合范围
let range: Vec<u64> = range_parser::parse("1,3-5,2").unwrap();
assert_eq!(range, vec![1, 3, 4, 5, 2]);
解析带有负数的范围
let range: Vec<i32> = range_parser::parse("-8,-5--1,0-3,-1").unwrap();
assert_eq!(range, vec![-8, -5, -4, -3, -2, -1, 0, 1, 2, 3, -1]);
解析带有自定义分隔符的范围
// parse range using `;` as separator for values and `..` as separator for ranges
let range: Vec<i32> = range_parser::parse_with("-2;0..3;-1;7", ";", "..").unwrap();
assert_eq!(range, vec![-2, 0, 1, 2, 3, -1, 7]);
变更日志
查看range-parser的变更日志 这里
许可证
range-parser采用MIT许可证。
您可以在这里阅读完整的许可证。
依赖项
~290–750KB
~18K SLoC