Сложное регулярное выражение с соответствующими скобками - PullRequest
1 голос
/ 24 февраля 2012

Я потратил слишком много времени, пытаясь извлечь это. У меня есть следующее сообщение, и я хочу извлечь часть данных из сообщения «data {{.....}}» перед аргументами. Я не могу полагаться на порядок сообщений, поэтому аргументы результата и команды можно увидеть в любом порядке в сообщении.

invokeid 3  data {{GainID|Value(dB)}  {0|0} {1|18} {2|17} {3|-1} {4|-255} {5|0} {6|12} {7|11} {8|10} {9|9} {10|8} {11|7} {12|6} {13|5} {14|4} {15|3} {16|2} {17|1} {18|0} {19|-1} {20|-2} {21|-3} {22|-4} {23|-5} {24|-6} {25|-7} {26|-8} {27|-9} {28|-10} {29|-11} {30|-12} {31|-13} {32|-14} {33|-15} {34|-16} {35|-17} {36|-18} {37|-19} {38|-20} {39|-21} {40|-22} {41|-23} {42|-24} {43|-25} {44|-26} {45|-27} {46|-28} {47|0}} arguments {{ DisplayGain -1 }} result 0 command OAMPCMD IPaddress 0.0.0.0

Это хочу, я хочу разобрать

data {{GainID|Value(dB)}  {0|0} {1|18} {2|17} {3|-1} {4|-255} {5|0} {6|12} {7|11} {8|10} {9|9} {10|8} {11|7} {12|6} {13|5} {14|4} {15|3} {16|2} {17|1} {18|0} {19|-1} {20|-2} {21|-3} {22|-4} {23|-5} {24|-6} {25|-7} {26|-8} {27|-9} {28|-10} {29|-11} {30|-12} {31|-13} {32|-14} {33|-15} {34|-16} {35|-17} {36|-18} {37|-19} {38|-20} {39|-21} {40|-22} {41|-23} {42|-24} {43|-25} {44|-26} {45|-27} {46|-28} {47|0}} 

И это делается с помощью следующего кода:

        string ret = String.Empty;
        Regex regEx = new Regex("data {{.*}}");
        Match regExMatch = regEx.Match(iqMessage);
        if (!regExMatch.Success)
            throw new IqScriptControlMessageParseException(String.Format("Could not find {0}.", DATA));

        ret = regExMatch.Value.Substring(DATA.Length).Trim();

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

Спасибо

1 Ответ

3 голосов
/ 24 февраля 2012

Используйте не жадное совпадение (.*? вместо .*) и избегайте фигурных скобок (они имеют особое значение в регулярных выражениях):

Regex regEx = new Regex(@"data \{\{.*?\}\}");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...