云网络设备做自动化部署时,边缘设备资源很紧,要尽快把 YANG 模型装进内存,因此得先把模型文件里多余的说明文字、初始取值之类信息清掉。
请按下面的规则写一个函数:这些字段要去掉,注释必须原封不动留下来,最后把清洗结果作为字符串返回。
清洗规则
规则1:目标字段删除
要删掉的关键字:remark、preset、required
删掉的跨度:从该关键字第一个字符起,一直删到本句结束用的 ;(这个分号也删掉)
允许跨行:关键字和分号中间可以夹着换行,匹配与删除都要跨过这些行
规则2:内容处理
被删区间:从关键字第一个字符到分号 ;
区间里面:换行符 \n 留下,别的字符(空格、正文、分号)都拿掉
处理后的样子:
关键字左边、还没进入区间的缩进空白,照原样留着
不管这句有没有跨行,每一行在区间里都只剩换行,行的条数不增不减
规则3:注释保护
单行注释:从 // 起直到这一行结束
多行注释:从 /∗ 起直到 ∗/,中间可以换行
保留方式:注释整段照抄,不能被清掉
规则4:边界定义
关键字左侧只能是:一行的开头、空格、制表符、{ 或 ;
关键字右侧只能是:空格、制表符、换行或 ;
两侧对不上:就当成普通名字,不要删(例如 myremark)
输入描述
给出一段字符串,内容是 YANG 文本
保证这段文本语法大体正确,分号 ; 都是真正的语句结束
输出描述
输出清洗之后的 YANG 字符串:指定关键字连同它后面直到分号的内容已经去掉,注释仍在
样例1
输入
container node {
leaf port {
type string;
remark "Edge port";
preset "eth0";
}
/*
块注释中出现 remark "fake";
整段都要留下
*/
leaf flag {
type string;
remark
"Line-a
Line-b";
required true;
}
leaf alias {
type string;
myremark "keep";
}
}
输出
container node {
leaf port {
type string;
}
/*
块注释中出现 remark "fake";
整段都要留下
*/
leaf flag {
type string;
}
leaf alias {
type string;
myremark "keep";
}
}