正则表达式读取固定宽度数字字段

pet*_*ust 1 regex

我希望正则表达式可以解析具有可选前导空格的固定长度字段中的右对齐数值.(这基本上是FORTRAN输出,但还有许多其他工具可以做到这一点).我知道场地的宽度.

假设该字段是宽度为5(I5)的整数.然后以下是所有符合的数值:

"  123"
"12345"
"-1234"
"   -1"
Run Code Online (Sandbox Code Playgroud)

我不能对前面和后面的字段做出任何假设.因此以下内容适用于I3,I5,I2:

"-121234512"
Run Code Online (Sandbox Code Playgroud)

并产生价值-12, 1234512.

应该没有与正则表达式相关的其他代码.我正在使用Java正则表达式,但我希望这是相当普遍的(至少符合C#).

如果可以对整数进行此操作,我还希望正则数据包含包含小数点的实数,例如 F10.3

"   -12.123"
Run Code Online (Sandbox Code Playgroud)

Bar*_*ers 5

正则表达式:

(?=[ ]*-?\d+)[ -\d]{5}
Run Code Online (Sandbox Code Playgroud)

匹配所有示例:

"  123"
"12345"
"-1234"
"   -1"
Run Code Online (Sandbox Code Playgroud)

并将它们分组链接:

((?=[ ]*-?\d+)[ -\d]{3})((?=[ ]*-?\d+)[ -\d]{5})((?=[ ]*-?\d+)[ -\d]{2})
Run Code Online (Sandbox Code Playgroud)

在输入上:

-121234512
Run Code Online (Sandbox Code Playgroud)

火柴:

$1 = -12
$2 = 12345
$3 = 12
Run Code Online (Sandbox Code Playgroud)

一个简短的解释:

(?=        # start positive look ahead
  [ ]*     #   zero or more space
  -?       #   an optional minus sign
  \d+      #   one or more digits
)          # end positive look ahead
[ -\d]{5}  # spaces, minus sign or digits, exactly 5 times
Run Code Online (Sandbox Code Playgroud)

如您所见,前瞻强制字符的顺序(数字和/或减号前的空格,数字前的减号).

您的浮动示例可能如下所示:

(?=[ ]*-?\d+(\.\d+)?)[ -\d.]{10}
Run Code Online (Sandbox Code Playgroud)