1. C# / Говнокод #18934

    −11

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    private static List<string> GetNewContents(string input) {
                List<int> tablesIndex = new List<int>();
                string file = input;
                int oldInd = 0;
                while (file.IndexOf("<table") != -1) {
                    int ind = file.IndexOf("<table");
                    tablesIndex.Add(ind + oldInd);
                    oldInd += ind;
                    file = file.Substring(ind + 1);
                }
    
                List<string> pIngs = new List<string>();
                for (int i = 0; i < tablesIndex.Count; i++) {
                    file = input.Substring(0, tablesIndex[i]);
                    if (file.LastIndexOf("<p") != -1) {
                        string res = "";
                        while (res == "") {
                            string result = string.Empty;
                            MatchCollection mc_col = Regex.Matches(file.Substring(file.LastIndexOf("<p")), "(?<=^|>)[^><]+?(?=<|$)", RegexOptions.IgnoreCase);
                            foreach (Match mat in mc_col) {
                                result = result + mat.Value.Replace(">", String.Empty).Replace("\n", string.Empty).Replace("\r", string.Empty).Replace("&nbsp;", " ");
                            }
                            res = result.Trim();
                            if (res != "")
                                pIngs.Add(file.Substring(file.LastIndexOf("<p")));
                            else {
                                file = file.Substring(0, file.LastIndexOf("<p") - 1);
                                if (file.LastIndexOf("<p") == -1) {
                                    pIngs.Add(" ");
                                    break;
                                }
                            }
                        }
                    } else {
                        pIngs.Add(" ");
                    }
                }
    
                List<string> titles = new List<string>();
                for (int i = 0; i < pIngs.Count; i++) {
                    string result = string.Empty;
                    MatchCollection mc_col = Regex.Matches(pIngs[i], "(?<=^|>)[^><]+?(?=<|$)", RegexOptions.IgnoreCase);
                    //string[] sss = tdValue.Split("<".ToCharArray()[0]);
                    foreach (Match mat in mc_col) {
                        result = result + mat.Value.Replace(">", String.Empty).Replace("\n", string.Empty).Replace("\r", string.Empty).Replace("&nbsp;", " ");
                    }
                    titles.Add(result);
                }
    
                return titles;
    
    
            }

    может я чего не понимаю, но он точно в своем уме был, когда так html таблицы парсил?

    Запостил: Lokich, 29 Октября 2015

    Комментарии (38) RSS

    • Желание парсить HTML кастомным кодом на C# пахнет говном
      Желание парсить его регулярками пахнет очень большим говном
      Бизнес задача, требующая выпаршивать данные из HTML таблицы пахнет говном еще больше.

      Освежитель воздуха "ёлочка" можно взять тут: https://html-agility-pack.net/select-single-node

      Но всё равно будет пахнуть так, словно в лесу кто-то насрал
      Ответить
      • А мне нравится парсить хтмл регулярками. Можно сделать <div>[^>]*<\div>.
        Ответить
        • Найди во второй колонке HTML, а в третей регулярки
          https://en.wikipedia.org/wiki/Chomsky_hierarchy#The_hierarchy
          Ответить
          • Там нет ни одного, ни другого.
            Ответить
            • ладно, попробуем по другому

              нажми на слово "Regular", и прочитай статью
              Ответить
              • Я так понимаю, «HTML» – это «context-sensitive language», а рагулярки – это «finite state automaton»?

                И типа, для каждого языка нужен свой автомат, который может с ним работать, поэтому нельзя парсить HTML регулярками, т.к. <div>[^>]*<\div> ищет подстроку в отрыве от контекста, который в HTML важен?
                Ответить
                • это значит что ты в принципе не можешь регулркой описать хтмл документ
                  Ответить
                  • Зато я могу описать рагуляркой нужный мне участок хтмл-странички, выдернуть его и распарить.
                    Ответить
                    • Ты конечно можешь но пол интернета ты таким образом не спиздишь
                      Ответить
                    • рагуляркой я могу и кусочек из войны и мира вытащить.

                      Это не значит, что регулярные выражения можно использовать для грамматического разбора русского языка
                      Ответить
                      • Справедливо. Если нам нужно найти все сцены, где Наташа Ростова была на балу, то здесь нужна другая питушня, а не рагулярки (я не разбираюсь в этой теории). Но чтобы вытащить все диалоги, вполне можно использовать регулярку, что-то типа:

                        — [А-Я][а-я ,":;]*\.


                        И она выполнит свою задачу.
                        Ответить
                        • Насколько я помню, Наташа Ростова ещё и на французском говорит
                          Ответить
                          • > на французском говорит

                            И эти люди нас потом ругают за речь, засранную англицизмами...
                            Ответить
                            • Какие люди? наташи ростовы?
                              Ответить
                              • Читатели войны миров.
                                Ответить
                                • --ты читал войну и мир?
                                  --я фильм смотрел смотрел, там еще такие противные треноги были
                                  Ответить
                        • — Иван Иванович, ваша регулярка сломается даже о такую простую фразу!
                          Ответить
                          • — А вы не восклицайте, уважаемый.
                            Ответить
                            • — "Вы" пишется с большой буквы. Кстати, кавычки тоже обосруца.
                              Ответить
                              • Если напишу с большой буквы, то регулярка обосрётся. А кавычки почему? Надо было заэскейпить?
                                Ответить
                                • Потому что кавычка не входит в группу [А-Я], не?
                                  Ответить
                                  • Ого, и правда. А Вы не начинайте с кавычки!

                                    В общем хуиная получилась регулярка, именно поэтому я за «построение синтаксического дерева для анализа естественного языка», что бы это ни значило.
                                    Ответить
                              • А вот и мануальные валидаторы регулярок подъехали))
                                Ответить
                  • .*
                    Ответить
                • примерно. Наверное валидный XHTML был content-free, но то говно, которое сейчас высирается в сайты, особенно в html5, контекстно зависимо.

                  В любом случае это не регулярная грамматика.

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


              теперь не просто забанят, но и инью посадят еще
              Ответить
              • Надо переоформить серваки в оффшор -- на десктопа, файка или снаута.
                Ответить

    Добавить комментарий