gpt4 book ai didi

c# - 尽可能长地匹配固定列的行

转载 作者:太空宇宙 更新时间:2023-11-03 20:13:29 25 4
gpt4 key购买 nike

我要从遗留系统中解析位置基础文件。文件中的每一列都有固定的列宽,每一行的长度最多为 80 个字符。问题是你不知道一行有多长。有时他们只填写了前五列,有时他们使用了所有列。

如果我知道使用了所有 80 个字符,那么我可以简单地这样做:

^\s*
(?<a>\w{3})
(?<b>[ \d]{2})
(?<c>[ 0-9a-fA-F]{2})
(?<d>.{20})
...

但这样做的问题是,如果缺少最后一列,则该行将不匹配。最后一列的字符数甚至可以少于该列的最大值。

看例子

Text to match         a   b  c  d
"AQM45A3A text " => AQM 45 A3 "A text " //group d has 9 chars instead of 20
"AQM45F5" => AQM 45 F5 //group d is missing
"AQM4" => AQM 4 //group b has 1 char instead of 2
"AQM4 ASome Text" => AQM 4 A "Some Text" //group b and c only uses one char, but fill up the gap with space
"AQM4FSome Text" => No match, group b should have two numbers, but it is only one.
"COM*A comment" => Comments do not match (all comments are prefixed with COM*)
" " => Empty lines do not match

我应该如何设计正则表达式来匹配这个?

编辑 1

在此示例中,我要解析的每一行都以 AQM 开头

  • a 列始终从位置 0 开始
  • b 列始终从位置 3 开始
  • c 列始终从位置 5 开始
  • d 列始终从位置 7 开始

如果一个列没有用完它的所有空间,文件是否有空间只能修剪使用的最后一列

编辑 2为了使它更清楚,我在这里附上了数据可能是什么样子的示例,以及列的定义(请注意,我在问题前面提到的示例已大大简化)

Example for AQM Definition for AQM

最佳答案

我不确定在这里使用正则表达式是否正确。如果我理解你的结构,你想要类似的东西

if (length >= 8) 
d = everything 8th column on
remove field d
else
d = empty

if (length >= 6)
c = everything 6th column on
remove field c
else
c = empty

等也许正则表达式可以做到这一点,但它可能会相当做作。

关于c# - 尽可能长地匹配固定列的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18360051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com