8 个稳定版本

1.2.1 2024年3月25日
1.2.0 2023年12月29日
1.0.3 2023年8月15日
1.0.1 2023年3月22日
0.1.0 2022年12月18日

#520解析器实现

Download history 59/week @ 2024-04-14 110/week @ 2024-04-21 36/week @ 2024-04-28 24/week @ 2024-05-05 12/week @ 2024-05-12 49/week @ 2024-05-19 44/week @ 2024-05-26 10/week @ 2024-06-02 18/week @ 2024-06-09 7/week @ 2024-06-16 18/week @ 2024-06-23 20/week @ 2024-06-30 99/week @ 2024-07-07 23/week @ 2024-07-21 30/week @ 2024-07-28

每月152 次下载
用于 si_units

MIT/Apache

40KB
579

Prse

github crates.io docs.rs

Prse 是一个注重速度和易用性的小型字符串解析库。(它也是无-std 兼容的!)

它提供了一个 parse! 宏,允许您使用类似格式参数的语法轻松地将字符串解析为任何类型。

Prse 目前支持 rustc 1.70 及以上版本。

示例

use prse::parse;

let input = "5 + -2 = 3";

let total: i32;
let (lhs, rhs): (i32, i32) = parse!(input, "{} + {} = {total}");

assert_eq!(lhs + rhs, total);

它还允许您一次性将分隔符分隔的多个变量解析到单个变量中。

use prse::parse;

let input = "My farm contains some amount of booleans: true || false || true || false";
let many: Vec<bool>;

// the variable to store the answer in is many and the separator is equal to " || "
parse!(input, "My farm contains some amount of booleans: {many: || :}");

assert_eq!(many, vec![true, false, true, false]);

如果您不想在解析失败时崩溃,可以使用 try_parse! 宏。

use prse::try_parse;
use std::path::PathBuf;

let input = "cd C:\\windows\\system32";
let path: Result<PathBuf, _ > = try_parse!(input, "cd {}");

assert_eq!(path.unwrap(), PathBuf::from("C:\\windows\\system32"));

此外,您可以使用 Parse derive 宏来帮助您解析自定义类型。为了获得更大的灵活性,您可以自己实现 Parse trait,以进行完全自定义的解析,如十六进制数字解析。

use prse::{parse, Parse};

#[derive(Parse, PartialEq, Eq, Debug)]
#[prse = "({x}, {y})"]
struct Position {
    x: i32,
    y: i32,
}

let input = "(1, 3) + (-2, 9)";

let (lhs, rhs): (Position, Position) = parse!(input, "{} + {}");

assert_eq!(lhs, Position { x: 1, y: 3 });
assert_eq!(rhs, Position { x: -2, y: 9 });

许可证

根据您的选择,在 Apache 许可证,版本 2.0MIT 许可证 下许可。
除非您明确声明,否则您根据 Apache-2.0 许可证定义的任何有意提交以包含在此软件包中的贡献,都应按上述方式双许可,而无需任何额外的条款或条件。

依赖项

~0.8–1.4MB
~29K SLoC