每个语句的正则表达式问题

时间:2019-01-30 05:11:49

标签: regex vb.net

我无法理解下面的正则表达式在哪里出了问题。正则表达式无法在此处匹配。

    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>

1 个答案:

答案 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)