C # RegEx - найти HTML-теги (div и якорь) - PullRequest
2 голосов
/ 06 апреля 2010

Мне нужно получить несколько разделов div (с определенным именем класса "row") с их содержимым и дополнительно найти все теги привязки (ссылки) (с классом "underline red bold"). Кратко говоря: получить раздел:

<div class = "row ">
 ... (divs, tags ...)
<a class="underline red bold" href="/searchClickThru?pid=prod56534895&amp;q=&amp;rpos=109181&amp;rpp=10&amp;_dyncharset=UTF-8&amp;sort=&amp;url=/culture-and-gender-intimate-relation-ksiazka,prod56534895,p">

и коллекции URL

string[] urls = {"/searchClickThru?pid=prod56534895&amp;q=&amp;rpos=109181&amp;rpp=10&amp;_dyncharset=UTF-8&amp;sort=&amp;url=/culture-and-gender-intimate-relation-ksiazka,prod56534895,p"}

вся страница выглядит так:

<html>

... много вещей

<div class="row ">

  <div class="photo">
    <a rel="nofollow" href="/searchClickThru?pid=prod56534895&amp;q=&amp;rpos=109181&amp;rpp=10&amp;_dyncharset=UTF-8&amp;sort=&amp;url=/culture-and-gender-intimate-relation-ksiazka,prod56534895,p">
      <img alt="alt msg" src="/b/s/b9/03/b9038292d147a582add07ee1f0607827.jpg">                 
 </a>
  </div>

  <div class="desc">
    <div class="l1">
      <div class="icons">
      </div>

      <table cellspacing="0" cellpadding="0" border="0">
        <tbody>
          <tr>
            <td>
              <div class="fleft">
                <a class="underline red bold" href="/searchClickThru?pid=prod56534895&amp;q=&amp;rpos=109181&amp;rpp=10&amp;_dyncharset=UTF-8&amp;sort=&amp;url=/culture-and-gender-intimate-relation-ksiazka,prod56534895,p">
                  Culture And Gender   <br>Intimate Relation</a>
              </div>

              <div class="fleft">

              </div>
            </td>
          </tr>
        </tbody>
      </table>
    </div>
    <div class="l2">

      <div>
      </div>
      <div>
        <div class="but">
        </div>
      </div>
    </div>
    <div class="l3">
      Long description
      <a class="underlinepix_red no_wrap" rel="nofollow" href="/searchClickThru?pid=prod56534895&amp;q=&amp;rpos=109181&amp;rpp=10&amp;_dyncharset=UTF-8&amp;sort=&amp;url=/culture-and-gender-intimate-relation-ksiazka,prod56534895,p">
        more<img alt="" src="/b/img/arr_red_sm.gif">
  </a>
    </div>
  </div>
</div>

<div class="omit"></div>

<div class="row ">

  <div class="photo">
    <a rel="nofollow" href="/searchClickThru?pid=prod56534895&amp;q=&amp;rpos=109181&amp;rpp=10&amp;_dyncharset=UTF-8&amp;sort=&amp;url=/culture-and-gender-intimate-relation-ksiazka,prod56534899,p">
      <img alt="alt msg" src="/b/s/b9/03/b9038292d147a582add07ee1f06078222.jpg">                    
 </a>
  </div>

  <div class="desc">
    <div class="l1">
      <div class="icons">
      </div>

      <table cellspacing="0" cellpadding="0" border="0">
        <tbody>
          <tr>
            <td>
              <div class="fleft">
                <a class="underline red bold" href="/searchClickThru?pid=prod56534895&amp;q=&amp;rpos=109181&amp;rpp=10&amp;_dyncharset=UTF-8&amp;sort=&amp;url=/culture-and-gender-intimate-relation-ksiazka,prod5653489225,p">
                  Culture And Gender   <br>Intimate Relation</a>
              </div>

              <div class="fleft">

              </div>
            </td>
          </tr>
        </tbody>
      </table>
    </div>
    <div class="l2">

      <div>
      </div>
      <div>
        <div class="but">
        </div>
      </div>
    </div>
    <div class="l3">
      Long description
      <a class="underlinepix_red no_wrap" rel="nofollow" href="/searchClickThru?pid=prod56534895&amp;q=&amp;rpos=109181&amp;rpp=10&amp;_dyncharset=UTF-8&amp;sort=&amp;url=/culture-and-gender-intimate-relation-ksiazka,prod56534895,p">
        more<img alt="" src="/b/img/arr_red_sm.gif">
  </a>
    </div>
  </div>
</div>

Может кто-нибудь помочь мне создать подходящий рег экс?

Ответы [ 5 ]

15 голосов
/ 06 апреля 2010

Регулярные выражения не очень подходят для этого.

Из-за вложенной природы HTML регулярное выражение, которое выполняет то, что вы просите, будет очень (очень, очень) длинным и сложным. Вместо этого используйте HTML-парсер.

1 голос
/ 06 апреля 2010

В качестве альтернативы, если вам удалось войти в LINQ и вам понравилась мощь LINQ, вы можете загрузить библиотеку LINQ-to-HTML Я еще не пробовал, поэтому не могу говорить о его возможностях.

1 голос
/ 06 апреля 2010

Ответ на этот вопрос примерно такой же, как ответ на этот вопрос:

RegEx соответствует открытым тегам, кроме автономных тегов XHTML

0 голосов
/ 06 апреля 2010

НЕОБХОДИМО ли использовать регулярные выражения?Если нет, то почему бы вам не использовать синтаксический анализатор HTML, такой как Html Agility Pack ... будет гораздо проще получить то, что вы хотите, если вы используете парсер вместо регулярных выражений.

0 голосов
/ 06 апреля 2010

Проверьте HTML Agility Pack

Это гибкий HTML-парсер, который создает DOM для чтения / записи и поддерживает обычный XPATH или XSLT (вы на самом деле не нужно понимать XPATH, ни XSLT использовать его, не волнуйтесь ...). это библиотека кода .NET, которая позволяет вам разбирать "вне Интернета" HTML-файлы. парсер очень терпимый с "реальным Мир "искаженный HTML. Объект Модель очень похожа на то, что предлагает System.Xml, но для документов HTML (или потоки). * * +1006

...