regex textX忽略第一条记录之前的文本

py49o6xq  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(92)

我正在为现有的文件格式编写解析器,问题是语法没有一种方法来指示什么是注解,而不是将所有不是记录的内容都视为注解。(必须是新行的第一个字符),并以斜杠/结束。记录的开头包含一个4个字符的字符串,用于指示记录的类型(例如&HEAD&TIME),后面跟着参数及其值。记录可以跨多行,如下面的&HEAD行所示。

好人

以下代码和语法语法适用于记录末尾和记录之间的注解(COM),甚至由于\Z与文件末尾匹配而正确地忽略了END_OF_FILE_COMMENTS
我试着使用\A告诉textX忽略文件开头的注解,直到它遇到第一条记录。
第一个
输出量:

head:
  chid: PBD
  title: Tools
time:
  t_begin: 0
  t_end: 60

坏人

但是,当注解放在第一条记录之前时,尽管regex模式在regex101上工作,但模型完全是空的
一个

问题

1.有没有办法让这个工作与语言注解?
1.如果第一个问题的答案是“否”,那么我在ModelBEG_OF_FILE_COMMENTS语法中遗漏了什么?

b1payxdu

b1payxdu1#

  1. Comment注解规则在每两个连续标记之间尝试,因此不能在这种情况下使用,因为它将在记录内部尝试,并且注解可以是任何内容(实际上,对于这种语言,注解不能是记录的一部分)。
    1.问题是BEG_OF_FILE_COMMENTS无法像应用匹配空白跳过之前那样匹配\A,因此当规则获得匹配更改时,您将越过开头。您可以为规则使用noskipws修饰符,或者完全删除该约束。但是,删除约束现在会消耗记录,以防止在规则开头添加[^&]。就像这样:
BEG_OF_FILE_COMMENTS: /(?ms)[^&].*?[\n\r](?=&)/;

我已经在开头使用注解和不使用注解进行了测试。另外,请注意,您始终可以将debug=True传递给(meta)model_from_str,以查看解析过程中如何进行匹配。

相关问题