如何解决如何使用 Rust nom 为这种结构文本编写解析器?
我有以下数据
let data = r#"title1
title1 line1
title1 line2
sep/
title2
title2 line1
title2 line2
title2 line3
sep/
title3
title3 line1
sep/"#;
基本上它代表三个条目:
struct Entry {
title: String,body: String,}
每个条目都有一个标题和一个正文。标题占用一行(不包括行尾),正文占用所有后续行,直到遇到分隔线 (sep/
)。我想要的结果是一个条目向量。我如何使用 nom 来解析它?我对 nom 很陌生,我无法让这些部分协同工作并形成一个有效的解析器。以下是我所拥有的:
use nom::IResult;
use nom::branch::alt;
use nom::bytes::complete::{tag,take_until,is_not,is_a};
use nom::error::ErrorKind::Parseto;
use nom::sequence::{pair,tuple,delimited,terminated};
use nom::combinator::opt;
use nom::error::{Error,ErrorKind};
use nom::character::complete::line_ending;
use nom::regexp::str::{re_find,re_match,re_matches,re_capture};
use nom::multi::many0;
struct Entry {
title: String,}
fn get_entry_title(i: &str) -> IResult<&str,&str> {
delimited(tag(""),take_until(alt((
tag("\r\n"),tag("\n")
))),alt((
tag("\r\n"),tag("\n")
))
)(i)
}
fn get_entry_body(i: &str) -> IResult<&str,&str> {
terminated(
take_until( tag("sep/")),tag("sep/")
)(i)
}
fn main() {
let data = r#"title1
title1 line1
title1 line2
sep/
title2
title2 line1
title2 line2
title2 line3
sep/
title3
title3 line1
sep/"#;
let result = get_entry_title(&data);
}
解决方法
这是一种仅 nom 方法(nom 6.1.2):
List<NEW_TYPE>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。