Проблема с регулярным выражением для каждого оператора - PullRequest
0 голосов
/ 30 января 2019

Я не могу понять, где я ошибаюсь с помощью регулярного выражения ниже.Регулярное выражение здесь не соответствует.

    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 голосов
/ 30 января 2019

Ваша проблема в вашем образце.В этой части вы забыли проверить 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...