如何编写一个匹配多个字符的正则表达式,这些字符取决于已经匹配的内容?

时间:2016-09-29 03:04:07

标签: c# .net regex

所以,我想解析使用固定宽度格式的输入文本。例如,请考虑:

  

KEYWORD = value / Comment text

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

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

标准量词可以轻松匹配“一个或多个”,“零或更多”等内容,但在我的情况下,确切的数字很重要且不是常数(取决于已经匹配的内容) )。

我想有一种方法可以做出很多选择,所以关键字可以是:

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

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

这很快就无法管理,以后在尝试匹配69个字符的固定宽度字段中的值+注释时会更糟。我想我必须排除这种方法。

有没有办法在.NET正则表达式中进行这种匹配,其中一个匹配的长度取决于前一个匹配的长度?

1 个答案:

答案 0 :(得分:0)

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

不。

每场比赛都不知道前一场比赛,也不知道前一场的长度。唯一的例外是匹配可用于类似重复文本模式的特定后向引用(请参阅Numbered Backreference)的仅文本


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