我正在尝试使用Rust中的combine库来解析字符串。我要解析的真实数据看起来像这样:
所以在数据的末尾有一个带引号的字符串,但该字符串也包含转义字符。我无法弄清如何解析这些转义字符并将其放置在其他引号之间。
上面的代码可以成功解析该字符串,但显然在中间的转义字符上会失败,最终输出
我想修改上面的代码,使其输出
我该如何做到这一点?
A79,216,0,4,2,2,N,"US\"PS"
所以在数据的末尾有一个带引号的字符串,但该字符串也包含转义字符。我无法弄清如何解析这些转义字符并将其放置在其他引号之间。
extern crate parser_combinators;
use self::parser_combinators::*;
fn main() {
let s = r#""HE\"LLO""#;
let data = many(satisfy(|c| c != '"')); // Fails on escaped " obviously
let mut str_parser = between(satisfy(|c| c == '"'), satisfy(|c| c == '"'), data);
let result : Result<(String, &str), ParseError> = str_parser.parse(s);
match result {
Ok((value, _)) => println!("{:?}", value),
Err(err) => println!("{}", err),
}
}
//=> "HE\\"
上面的代码可以成功解析该字符串,但显然在中间的转义字符上会失败,最终输出
"HE\\"
。我想修改上面的代码,使其输出
"HE\\\"LLO"
。我该如何做到这一点?
"\"HE\\\"LLO\""
可能更好地写成r#""HE\"LLO""#
。 - Chris Morganr"..."
、r#"..."#
、r##"..."##
等格式。 - Chris Morgan