我无法理解下面的正则表达式在哪里出了问题。正则表达式无法在此处匹配。
Dim TextLine as string=" 1 -7.007184E+02 2.8E+01 0.0
2 -2.450452E+04 -1.8E-01 0.0 "
Dim regExResults As New Regex("(\d+)\s+(-?\d+\.\d+E-?\d+)\s+(-?
\d+\.\d+E-?\d+)\s+(-?\d+\.\d+)")
Dim ID as long
Dim Data1 as double
Dim Data2 as double
Dim Data3 as double
For Each match As Match In regExResults.Matches(TextLine)
ID = match.Groups(1).Value
Data1= match.Groups(2).Value
Data2= match.Groups(3).Value
Data3 = match.Groups(4).Value
Next match
'Dim regExResults As New Regex("\s+(\d+)\s+(-?\d+\.\d+E-?\d+)\s+(-?
\d+\.\d+E-?\d+)\s+(-?\d+\.\d+)") 'Alternative Regex
我期待如下所示的两次匹配,不幸的是,循环重复了两次,甚至没有进入循环。有人可以建议我前进的方向吗? TextLine是从文本文件中提取的。
<1 -7.007184E + 02 2.8E + 01 0.0>
<2 -2.450452E + 04 -1.8E-01 0.0>
答案 0 :(得分:1)
您的问题出在您的模式上。在这一部分中,您忘记了检查E+##
:
(-?\d+\.\d+E-?\d+)
这将匹配例如-1.8E-01
,但不匹配-1.8E+01
。您还需要使用它来检查加号,因此您应该将其更改为:
(-?\d+\.\d+E[+-]?\d+)
新模式:
(\d+)\s+(-?\d+\.\d+E[+-]?\d+)\s+(-?\d+\.\d+E[+-]?\d+)\s+(-?\d+\.\d+)
还要注意,通过在字符串中添加空格或换行符,它们在默认情况下也将被解释为模式的一部分,因此您应通过指定RegexOptions.IgnorePatternWhitespace
来禁用它:
Dim regExResults As New Regex("(\d+)\s+(-?\d+\.\d+E[+-]?\d+)\s+(-?
\d+\.\d+E[+-]?\d+)\s+(-?\d+\.\d+)",
RegexOptions.IgnorePatternWhitespace)