Разборка текста посредством регулярных выражений - C#

Узнай цену своей работы

Формулировка задачи:

Имеется текст такого вида:
Листинг программы
  1. (compInst "XC00160"
  2. (compRef "O003_1")
  3. (originalName "O003")
  4. (attr "FP" "O003" (pt -2.75 -2.0) (textStyleRef "T:H78W7") )
  5. )
  6. (compInst "XC00161"
  7. (compRef "O003_1")
  8. (originalName "O003")
  9. (attr "FP" "O003" (pt -2.75 -2.0) (textStyleRef "T:H78W7") )
  10. )
  11. (compInst "XC00162"
  12. (compRef "O003_1")
  13. (originalName "O003")
  14. (attr "FP" "O003" (pt -2.75 -2.0) (textStyleRef "T:H78W7") )
  15. )
  16. .................................
  17. БлаБлаБла
  18. ................................
  19. //Начинать отсюда
  20. (net "PPIN2"
  21. (node "D4" "194")
  22. (node "X5" "3")
  23. (node "R18" "1")
  24. )
  25. (net "PPIN3"
  26. (node "D4" "199")
  27. (node "X5" "5")
  28. (node "R36" "1")
  29. )
  30. (net "NPIN2"
  31. (node "D4" "195")
  32. (node "X5" "22")
  33. (node "R18" "2")
  34. )
  35. (net "PPIN4"
  36. (node "D4" "223")
  37. (node "X5" "7")
  38. (node "R38" "1")
  39. )
  40. (net "NPIN3"
  41. (node "D4" "200")
  42. (node "X5" "24")
  43. (node "R36" "2")
  44. )
  45. ....................
  46. ЕщёБлаБлаБла
  47. .....................
С помощью регулярных выражений собрать данные в примерно в таком виде: Nets("PPIN2")={{D4,194},{X5,3},{R18.1}} Nets("PPIN3")={{D4,199},{X5,5},{R36,1}} ..... и так далее.
То есть, надо окучить группы, начинающиеся со строк вида

(net "

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

(net

» а в конце группы подряд две закрывающие скобки без каких-либо значащих символов. Допустим, я выкину из исходного текста все пробелы и переводы строк. Тогда отлавливаем все фрагменты, начинающиеся на «

(net

» и заканчивающиеся на «

))

». "Заголовки" удалось отловить без труда, а вот как в шаблоне указать, что конец должен быть «

))

»?

Решение задачи: «Разборка текста посредством регулярных выражений»

textual
Листинг программы
  1. var text = File.ReadAllText(@"p:\input.txt");
  2. var pattern = @"
  3.    (?<=net \s+ ""(?<netname>\w+)"" .*?)
  4.        \(node \s+ ""(?<name>\w+)"" \s+ ""(?<value>\w+)"" \s*\)";
  5.  
  6. var Nets = Regex
  7.     .Matches(text, pattern, RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace)
  8.     .Cast<Match>()
  9.     .GroupBy(net => net.Groups["netname"].Value)
  10.     .ToDictionary(
  11.         g => g.Key,
  12.         g => g.Select(node => new /* какая-то структура */
  13.         {
  14.             Name = node.Groups["name"].Value,
  15.             Value = node.Groups["value"].Value
  16.         }).ToList()
  17.     );
  18.  
  19. // Nets["NPIN2"][0].Value = ...
  20. foreach (var pair in Nets)
  21. {
  22.     Console.WriteLine($@"Nets(""{pair.Key}"") = {{{string.Join(", ", pair.Value)}}}");
  23. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.222 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы