如何编写一个正则表达式,根据已经匹配的内容匹配多个字符

本文关键字:字符 何编写 一个 正则表达式 | 更新日期: 2023-09-27 18:09:29

所以,我想解析使用固定宽度格式的输入文本。作为一个例子,考虑:

关键字= value/注释文本

文本的关键字部分为8个字符,左对齐并填充空格。如果第9列中有一个=,那么下一部分是一个值,后面是一个可选的注释,前面有一个'/'。如果第9列中没有=,则该行的其余部分为注释。每行由80个空格字符组成。(仅供参考,这是NASA FITS格式的一部分)。

因此,对于关键字部分,我想匹配总共8个字符,由X个有效关键字字符后跟(8 - X)空格组成。有效的关键字字符是数字、大写字符、连字符和下划线。出现的尾随空格的数量必须是8减去有效关键字字符的数量,因此匹配空格的表达式的量词需要从已经匹配的有效关键字字符的数量中派生出来。

标准量词使匹配"一个或多个","零或多个"等内容变得容易,但在我的情况下,确切的数字很重要,并且不是恒定的(它取决于已经匹配的内容)。

我想有一种方法可以做到这一点,那就是做很多选择,所以关键字可以是:

1个字符后跟7个空格,或2个字符后面加6个空格,等等

([0-9A-Z-_]{1} {7})|([0-9A-Z-_]{2} {6})|...etc)

这很快变得难以管理,以后当尝试匹配固定宽度为69个字符的Value + Comment时,情况会更糟。我想我必须排除这种方法。

是否有一种方法可以在。net正则表达式中进行这种匹配,其中一个匹配的长度取决于先前匹配的长度?

如何编写一个正则表达式,根据已经匹配的内容匹配多个字符

是否有一种方法可以在。net正则表达式中进行这种匹配,其中一个匹配的长度取决于先前匹配的长度?

每个匹配不知道前一个匹配,也不知道前一个匹配的长度。唯一的例外是只匹配特定反向引用(参见编号反向引用)的文本,该引用可用于类似的重复文本模式。


要执行这样的操作,我建议执行一个多步骤的编程过程,其中第一步是将文本标记为其最小的单位,而第二个操作采用这些标记并应用您规定的规则来生成输出。