Помогите с регуляркой, пожалуйста.



  • Нужно с текста ниже достать ссылки и текст перед ними:
    «Если одна из них “садится” на стену, то сестричка обязательно должна сделать так же»</em></strong></p> <figure><img src="https://site.com/storage/2020/s/sobaki-s-milymi-strannostyami/8.jpg

    Нужно учитывать:
    https://site.com/storage - не изменный текст
    /2020/s/sobaki-s-milymi-strannostyami/ - изменяется
    8.jpg - от 1.jpg до 30.jpg

    Сам текст:
    </figure> <p class="note">Фото: <a href="https://www.reddit.com/r/funny/comments/f2fhx6/my_dog_is_a_bit_of_a_freak_when_the_camera_comes/">Reddit</a></p> <p><strong><em>«Если одна из них “садится” на стену, то сестричка обязательно должна сделать так же»</em></strong></p> <figure><img src="https://site.com/storage/2020/s/sobaki-s-milymi-strannostyami/8.jpg" alt=""></figure> <p class="note">Фото: <a href="https://www.reddit.com/r/WhatsWrongWithYourDog/comments/aiogw2/when_one_sits_on_the_wall_obviously_the_other_has/">Reddit</a></p> <p><strong>Похоже, кто-то здесь не в восторге от высоты</strong></p> <figure><img src="https://site.com/storage/2020/s/sobaki-s-milymi-strannostyami/9.jpg" alt=""></figure> <p class="note">Фото: <a href="https://www.reddit.com/r/WhatsWrongWithYourDog/comments/f5ibvv/not_going_any_higher_on_this_stupid_hike/">Reddit</a></p> <p><strong>До и после прогулки</strong></p> <figure><img src="



  • Вам не нужна регулярка, используйте xpath //p[@class="note"] для текста и //p[@class="note"]/@href для ссылок



  • @UserTrue said in Помогите с регуляркой, пожалуйста.:

    //p[@class="note"]

    По "note" это не та ссылка и текст которая мне нужна. Посмотрите, пожалуйста, еще раз.
    И мне нужно знать что над ссылкой https://site.com/storage/2020/s/sobaki-s-milymi-strannostyami/8.jpg стоит текст, который описывает эту фото. Тоесть если это ссылка на фото 8.jpg то мне нужет текст, который располагается над ней и сохранить этот текст в таком формате 8.txt
    Как сохранять я знаю, вот только как спарсить мучаюсь вторые сутки.



  • Вот это нужно мне:

    «Если одна из них “садится” на стену, то сестричка обязательно должна сделать так же»</em></strong></p> <figure><img src="https://site.com/storage/2020/s/sobaki-s-milymi-strannostyami/8.jpg"

    Похоже, кто-то здесь не в восторге от высоты</strong></p> <figure><img src="https://site.com/storage/2020/s/sobaki-s-milymi-strannostyami/9.jpg"



  • @wladeeck Сложно конечно по этим огрызкам, но вот попробуйте

    Для текста

    //p[@class="note"]/following-sibling::p[1]
    

    Для ссылок

    //p[@class="note"]/following-sibling::figure/img/@src
    


  • @UserTrue Спасибо! Все работает! Только как мне теперь узнать что текст принадлежит конкретному фото? Можно таким образом взять текст вместе с ссылкой?



  • @wladeeck Они по идее будут идти в одинаковом порядке. Тоесть первый элемент из списка с текстом будет соответствовать первому элементу из списка ссылок



  • @UserTrue Еще раз спасибо, надеюсь так и будет.



  • @UserTrue К сожалению не подходит, на другой странице сайта уже другая картина:

    width="100%" height="600"></iframe></figure>
    
    <p>По ее мнению, игрок-мужчина никогда бы не получил предупреждение за резкое высказывание. <i>«Я 
    неоднократно наблюдала, как резко мужчины называли судей, но те никогда их не наказывали. Я 
    здесь, чтобы бороться за права и равенство женщин. И я считаю сексизмом то, что он отнял у меня 
    гейм, когда я назвала его вором»,</i> — отметила Уильямс.</p>
    <figure data-feedback="fb:likes, fb:comments"><img src="https://site.com/storage/2018/s/serena-uilyams-proigrala-yaponke/4.jpg"></figure>
    <!-- Composite Start --> <div id="M459225ScriptRootC704163"> <div id="M459225PreloadC704163"> Loading... </div> <script> (function(){ var D=new Date(),d=document,b='body',ce='createElement',ac='appendChild',st='style',ds='display',n='none',gi='getElementById',lp=d.location.protocol,wp=lp.indexOf('http')==0?lp:'https:'; var i=d[ce]('iframe');i[st][ds]=n;d[gi]("M459225ScriptRootC704163")[ac](i);try{var iw=i.contentWindow.document;iw.open();iw.writeln("<ht"+"ml><bo"+"dy></bo"+"dy></ht"+"ml>");iw.close();var c=iw[b];} catch(e){var iw=d;var c=d[gi]("M459225ScriptRootC704163");}var dv=iw[ce]('div');dv.id="MG_ID";dv[st][ds]=n;dv.innerHTML=704163;c[ac](dv); var s=iw[ce]('script');s.async='async';s.defer='defer';s.charset='utf-8';s.src=wp+"//jsc.mgid.com/o/f/ofigenno.com.704163.js?t="+D.getUTCFullYear()+D.getUTCMonth()+D.getUTCDate()+D.getUTCHours();c[ac](s);})(); </script><iframe style="display: none;"></iframe> </div> <!-- Composite End --><figure data-feedback="fb:likes, fb:comments"><img src="https://site.com/storage/2018/s/serena-uilyams-proigrala-yaponke/5.jpg"></figure>
    
    <p>Профессиональные теннисисты и журналисты раскритиковали поведение Серены. Ее выпад против судьи 
    сочли не иначе как истерикой и обвинили Уильямс в том, что она просто не умеет проигрывать. Канадец Грег 
    Руседски заявил, что Уильямс нужно извиниться перед Осакой, ведь она испортила японке первую большую 
    победу.</p>
    <figure data-feedback="fb:likes, fb:comments"><img src="https://site.com/storage/2018/s/serena-uilyams-proigrala-yaponke/6.jpg"></figure>
    <div class="ad intext">
    

    Получается нужно отталкиваться все таки от ссылки и смотреть выше от нее текст.



  • @wladeeck said in Помогите с регуляркой, пожалуйста.:

    @UserTrue К сожалению не подходит, на другой странице сайта уже другая картина:

    width="100%" height="600"></iframe></figure>
    
    <p>По ее мнению, игрок-мужчина никогда бы не получил предупреждение за резкое высказывание. <i>«Я 
    неоднократно наблюдала, как резко мужчины называли судей, но те никогда их не наказывали. Я 
    здесь, чтобы бороться за права и равенство женщин. И я считаю сексизмом то, что он отнял у меня 
    гейм, когда я назвала его вором»,</i> — отметила Уильямс.</p>
    <figure data-feedback="fb:likes, fb:comments"><img src="https://site.com/storage/2018/s/serena-uilyams-proigrala-yaponke/4.jpg"></figure>
    <!-- Composite Start --> <div id="M459225ScriptRootC704163"> <div id="M459225PreloadC704163"> Loading... </div> <script> (function(){ var D=new Date(),d=document,b='body',ce='createElement',ac='appendChild',st='style',ds='display',n='none',gi='getElementById',lp=d.location.protocol,wp=lp.indexOf('http')==0?lp:'https:'; var i=d[ce]('iframe');i[st][ds]=n;d[gi]("M459225ScriptRootC704163")[ac](i);try{var iw=i.contentWindow.document;iw.open();iw.writeln("<ht"+"ml><bo"+"dy></bo"+"dy></ht"+"ml>");iw.close();var c=iw[b];} catch(e){var iw=d;var c=d[gi]("M459225ScriptRootC704163");}var dv=iw[ce]('div');dv.id="MG_ID";dv[st][ds]=n;dv.innerHTML=704163;c[ac](dv); var s=iw[ce]('script');s.async='async';s.defer='defer';s.charset='utf-8';s.src=wp+"//jsc.mgid.com/o/f/ofigenno.com.704163.js?t="+D.getUTCFullYear()+D.getUTCMonth()+D.getUTCDate()+D.getUTCHours();c[ac](s);})(); </script><iframe style="display: none;"></iframe> </div> <!-- Composite End --><figure data-feedback="fb:likes, fb:comments"><img src="https://site.com/storage/2018/s/serena-uilyams-proigrala-yaponke/5.jpg"></figure>
    
    <p>Профессиональные теннисисты и журналисты раскритиковали поведение Серены. Ее выпад против судьи 
    сочли не иначе как истерикой и обвинили Уильямс в том, что она просто не умеет проигрывать. Канадец Грег 
    Руседски заявил, что Уильямс нужно извиниться перед Осакой, ведь она испортила японке первую большую 
    победу.</p>
    <figure data-feedback="fb:likes, fb:comments"><img src="https://site.com/storage/2018/s/serena-uilyams-proigrala-yaponke/6.jpg"></figure>
    <div class="ad intext">
    

    Получается нужно отталкиваться все таки от ссылки и смотреть выше от нее текст.

    Вы бы лучше привели пример всей страницы, или лучше сразу нескольких, чтобы сразу проверять решение, а не ждать от вас ответа работает\не работает.



  • Для того текста, который вы указали здесь, подойдёт такая регулярка:

    <p>([\s\S]*?)<\/p>[\s\S]*?img src="(.*?)"
    

    можете проверить здесь https://regex101.com/r/mweOIm/1

    Используйте действие "Первое вхождение", в переменной GROUP1 будет текст, а в GROUP2 ссылка



  • @Fox Не совсем помогло.

    Я избавился от лишнего "Извлеч все данные" <p>.*</p>

    1. Получаю текст:
    • <p>Климатологи отмечают, что нынешний июнь стал самым жарким за всю историю наблюдений, что определенно говорит об изменении климата на планете.</p> <figure><img src="https://site.com/storage/2019/a/anomalnaya-zhara-v-evrope/11.jpg" alt=""></figure> <p>Эмманюэль Макрон и вовсе прямым текстом заговорил о глобальном потеплении и подчеркнул, что <a href="https://site.com/kak-vestsi-ekologicheskiy-stil-zhizni">нынешних мер по борьбе с ним недостаточно</a>. </p> <figure><img src="https://site.com/storage/2019/a/anomalnaya-zhara-v-evrope/12.jpg" alt=""></figure> <p>Не так давно мы писали о том, что <a href="https://site.com/rekordnoe-tayanie-ldov-v-grenlandii">растаяли льды в Гренландии</a>. И хотя это тоже сезонное явление, ученые всего мира видят огромные проблемы. Человечество всё-таки довело планету до серьезных климатических изменений, и кто знает, что нам теперь сулит будущее.</p>"
    1. С вашей помощью я извлек все ссылки (беру например: https://site.com/storage/2020/s/sobaki-s-milymi-strannostyami/11.jpg)

    2. И получаю регуляркой русский текст который расположен над ссылкой: "Извлечь все данные":
      ([\—\”\“\№)([][{}\«\»=<>^.,-_'"@?!:$\0-9А-Яа-яёЁ( )]+)([)([][{}\«\»=<>^.,-_'"@?!:$\0-9a-zA-ZА( )]+)https://site.com/storage/2020/s/sobaki-s-milymi-strannostyami/11.jpg

    3. Получаю результат:

    Климатологи отмечают, что нынешний июнь стал самым жарким за всю историю наблюдений, что определенно говорит об изменении климата на планете.</

    Все работает, как нужно, только работает в конструкторе а в БАСе выдает пустой результат(использую "Извлечь все данные").

    Также происходит проблема если в извлеченном тексте присутствуют английские слова, например:



  • @wladeeck said in Помогите с регуляркой, пожалуйста.:

    @Fox Не совсем помогло.

    Я избавился от лишнего "Извлеч все данные" <p>.*</p>

    1. Получаю текст:
    • <p>Климатологи отмечают, что нынешний июнь стал самым жарким за всю историю наблюдений, что определенно говорит об изменении климата на планете.</p> <figure><img src="https://site.com/storage/2019/a/anomalnaya-zhara-v-evrope/11.jpg" alt=""></figure> <p>Эмманюэль Макрон и вовсе прямым текстом заговорил о глобальном потеплении и подчеркнул, что <a href="https://site.com/kak-vestsi-ekologicheskiy-stil-zhizni">нынешних мер по борьбе с ним недостаточно</a>. </p> <figure><img src="https://site.com/storage/2019/a/anomalnaya-zhara-v-evrope/12.jpg" alt=""></figure> <p>Не так давно мы писали о том, что <a href="https://site.com/rekordnoe-tayanie-ldov-v-grenlandii">растаяли льды в Гренландии</a>. И хотя это тоже сезонное явление, ученые всего мира видят огромные проблемы. Человечество всё-таки довело планету до серьезных климатических изменений, и кто знает, что нам теперь сулит будущее.</p>"
    1. С вашей помощью я извлек все ссылки (беру например: https://site.com/storage/2020/s/sobaki-s-milymi-strannostyami/11.jpg)

    2. И получаю регуляркой русский текст который расположен над ссылкой: "Извлечь все данные":
      ([\—\”\“\№)([][{}\«\»=<>^.,-_'"@?!:$\0-9А-Яа-яёЁ( )]+)([)([][{}\«\»=<>^.,-_'"@?!:$\0-9a-zA-ZА( )]+)https://site.com/storage/2020/s/sobaki-s-milymi-strannostyami/11.jpg

    3. Получаю результат:

    Климатологи отмечают, что нынешний июнь стал самым жарким за всю историю наблюдений, что определенно говорит об изменении климата на планете.</

    Все работает, как нужно, только работает в конструкторе а в БАСе выдает пустой результат(использую "Извлечь все данные").

    Также происходит проблема если в извлеченном тексте присутствуют английские слова, например:

    Боже мой.. бедный интерпретатор регулярного выражения, ему же перебирать оба ваших диапазона

    ([\—\”\“\№)([][{}\«\»=<>^.,-_'"@?!:$\0-9А-Яа-яёЁ( )]+)([)([][{}\«\»=<>^.,-_'"@?!:$\0-9a-zA-ZА( )]+)
    

    к полному коду html страницы на каждый блин символ диапазона...

    В действии "Извлечь все данные" не работают группы, именно по этому я указал использовать действие "Первое вхождение"

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



  • @Fox а кто говорит о полном коде, только к этому фрагменту применяется регулярка. Спасибо вам большое за ответы, с первым вхождением заработала моя регулярка.


Log in to reply