в тексте нужно найти первый попавшийся sku id, с in-stock=“true”
<sku id="(.+?)" title="(.+?)" value="(.+?)" default="false" in-stock="true"
не работает
<sku id="1689949376482547" title="3-6 mos" value="3-6" default="false" in-stock="false" reg-price="<span class="reg-price-dollars">$29.95</span>" sale-price="<span class="reg-price-dollars">$24.99</span>" db-sale-price="$24.99" b-price="<span class="reg-price-dollars">$14.99</span>" promo-name="Includes Extra 40% Off" price-tiers="3"/><sku id="1689949376482548" title="6-12 mos" value="6-12" default="false" in-stock="false" reg-price="<span class="reg-price-dollars">$29.95</span>" sale-price="<span class="reg-price-dollars">$24.99</span>" db-sale-price="$24.99" b-price="<span class="reg-price-dollars">$14.99</span>" promo-name="Includes Extra 40% Off" price-tiers="3"/><sku id="1689949376482549" title="12-18 mos" value="1218" default="false" in-stock="true" reg-price="<span class="reg-price-dollars">$29.95</span>" sale-price="<span class="reg-price-dollars">$24.99</span>" db-sale-price="$24.99" b-price="<span class="reg-price-dollars">$14.99</span>" promo-name="Includes Extra 40% Off" price-tiers="3"/><sku id="1689949376482550" title="18-24 mos" value="1824" default="false" in-stock="false" reg-price="<span class="reg-price-dollars">$29.95</span>" sale-price="<span class="reg-price-dollars">$24.99</span>" db-sale-price="$24.99" b-price="<span class="reg-price-dollars">$14.99</span>" promo-name="Includes Extra 40% Off" price-tiers="3"/><sku id="1689949376482551" title="2T" value="2T" default="false" in-stock="false" reg-price="<span
Заранее спасибо!
joemast
(Александр Таранков)
22.Октябрь.2013 06:07:37
#2
в value пропущена открывающая кавычка
пропустил… исправил, но и с ней не работает ((
TIT
(Сергей Блохин)
22.Октябрь.2013 08:28:03
#4
Уж сколкьо раз твердили миру…
Не используйте регулярные выражения для работы с XML/HTML.
Есть же большое количество парсеров на всех языках.
1 лайк
Поддержу @TIT вот этой ссылкой: Why is it such a bad idea to parse XML with regex? - Stack Overflow
Но из спортивного интереса:
import re
string = '<sku id="1689949376482547" title="3-6 mos" value="3-6" default="false" in-stock="true" reg-price= bla-bla-bla'
pattern = re.compile('<sku id="(.\d+)" (.*) in-stock="true"')
idf = re.findall (pattern,string)
print idf[0][0]
1689949376482547
1 лайк
ну и еще достаточно простое решение - это просто через строки сделать.
разделить split’ом текст, чтобы остался массив строк типа "<sku ..... />"
ну и дальше для каждого проверять, если contains('in-stock="true"')
, то по индексу выбирать из строки id.
TIT
(Сергей Блохин)
22.Октябрь.2013 11:02:53
#7
Похоже у вас парсер съел часть сообщения?
polusok
(Mykhailo Poliarush)
22.Октябрь.2013 11:16:07
#8
@sidelnikovmike да, потому что код надо правильно вставлять, в FAQ указаны примеры Ответы на вопросы - automated-testing.info
polusok
(Mykhailo Poliarush)
22.Октябрь.2013 11:19:05
#9
ну это не эффективное решение, лучше через regexp
@TIT @polusok неа, он ничего не съел. именно так я и писал. вы имели в виду наверное “…”. Это я описал так примерный вид элементов массива. Ну то есть элменты будут равны по сути тэгам sku с их содержанием.
polusok
(Mykhailo Poliarush)
22.Октябрь.2013 12:31:52
#11
съел, съел, а выглядит нормально, потому что я ваш комментарий подправил
надо же. а я и не заметил. прошу прощения
Keda
(Ruslan Semerenko)
22.Октябрь.2013 15:26:52
#13
Не сработает. Из-за жадности
.*
захватим все что между первым
<sku id="(.\d+)"
и последним
in-stock="true"
А правильно будет использовать
[^>]*
3 лайка
v_vilar_b1
(Vitaliy )
23.Октябрь.2013 01:02:10
#16
Большое спаcибо, @Keda и всем откликнувшимся! Все работает, сxватывает на лету. _)))
<sku id="(.\d+)"[^>]*in-stock="true"
1 лайк