#range #parse #numbers #representation #kind #separator #generic-range

range-parser

一个Rust库,用于解析任何类型数字的范围表示

3个版本

0.1.2 2024年7月22日
0.1.1 2024年7月8日
0.1.0 2024年7月8日

#271 in 解析工具

Download history 291/week @ 2024-07-08 10/week @ 2024-07-15 146/week @ 2024-07-22

每月447次下载

MIT许可证

17KB
212 代码行

range-parser

license-mit build-test downloads latest version Conventional Commits docs



关于range-parser

range-parser是一个简单的Rust包,用于将文本表示的范围(例如 1-3,5-81,3,41-5)解析为包含该范围所有项的Vector。

开始使用

  1. range-parser添加到您的Cargo.toml

    range-parser = "0.1"
    
  2. 从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