TextFSM如何用同一变量收集多行多实例匹配值?
TextFSM多行多匹配问题解决方案
问题根源
你当前的模板规则^\s*\d+.\s+${alm} -> Continue.Record仅会匹配每行开头的第一个带编号条目,同一行内后续的条目(比如text2、text3、text5)因为不符合行开头的匹配条件,无法被捕获,最终只得到每行第一个条目。
修正后的模板
Value List alm (\S+) Start ^\s*\d+\.\s+${alm} -> Continue ^\s*$ -> Record ^set=$ -> Continue
模板说明
- 匹配所有编号条目:
^\s*\d+\.\s+${alm} -> Continue- 正则
^\s*\d+\.\s+匹配任意数量空格开头、紧跟数字+点号+空格的格式(覆盖行内任意位置的编号条目,比如" 2. text2"、" 3. text3") - 捕获
${alm}后执行Continue,不触发记录,让同一行的所有条目都能被依次捕获
- 正则
- 触发记录操作:
^\s*$ -> Record- 当遇到空行(或仅含空格的行)时,将之前捕获的所有
alm值批量记录
- 当遇到空行(或仅含空格的行)时,将之前捕获的所有
- 跳过无关行:
^set=$ -> Continue- 跳过开头的
set=行,不进行任何捕获或记录
- 跳过开头的
验证结果
使用该模板处理你的输入文本,会得到期望结果:[text1, text2, text3, text4, text5, text6]
内容的提问来源于stack exchange,提问作者user3490280
相关产品推荐
相关产品推荐

