Выпарсить название списка

  • Автор темы Автор темы Nikol
  • Дата начала Дата начала

Nikol

Client
Регистрация
28.04.2013
Сообщения
185
Реакции
11
Баллы
18
Имеется два списка идущих друг за другом. В зависимости от критериев необходимый предмет попадает то в один, то в другой список. Подскажите пожалуйста регулярное выражение, которым можно выпарсить название списка. К примеру, название списка (Важный список), в котором находится "Sugar", и название списка (Второстепенный список), в котором находится "Mandarin". Ниже код.

HTML:
Развернуть Свернуть Копировать
<p id="">Важный список:</p>
<ol class="listInline">
    	  
             <li> 


	1.<a href="value/sugar.6398/" class="username organizer">Sugar</a>

&nbsp;
</li>
       	  
             <li> 


	2.<a href="value/banana.20201/" class="username paid">Banana</a>

&nbsp;
</li>
       	  
             <li> 


	
       	   
</ol>



<p id="">Второстепенный список:</p>
<ol class="listInline">
    	  
             <li> 


	1.<a href="value/apricot.41629/" class="username paid">Apricot</a>

&nbsp;
</li>
       	  
             <li> 


	2.<a href="value/mandarin.9168/" class="username unpaid">Mandarin</a>

&nbsp;
</li>
       	  
             
       	   
</ol>
 
Регулярное выражение одинаковое. Берите просто первое вхождение.
Или берите начальной конструкцией (?<=</ol>[\w\W]*<p id="">)
 
Благодарю Вас за ответ, но я немного не понял. Можно пояснить подробнее? И если можно касательно вышеприведенного примера.
Я пытался использовать следующее регулярное выражение, но где-то здесь ошибка:
(?<=<p(.*)?>).*список(?=.*(<p id="">.*список.*)?Apricot.*)
 
Что то вы очень круто закрутили... Если задача просто взять в переменную название первого списка для кода, который Вы привели подойдет это регулярное выражение - (?<=<p\ id="">).*?(?=</p>) и совпадение под номером 0 и будет искомым названием - Важный список, под номером 1 - Второстепенный список
 
Да я это знаю, но дело в том, что мне необходимо выпарсить каждый раз новое значение (название списка). Значение списка зависит от того, в какую часть попадает в данном случае Apricot. Каждый раз Apricot будет попадать в разные списки в Важный список и Второстепенный список. И, в зависимости от того, куда он попал, мне нужно значение (наименование) списка.
 
<p\ id="">[\w\W]*?(?=</ol>)
Складывать результаты в список со своим собственным разделителем. например слово BREAK
Потом брать построчно и парсить словом Apricot.
Если нашли чего, из тех же данных уже просто парсите название списка.
 
Уважаемый rostonix благодарю Вас за Ваше время, но я пошел по другому пути.
Взял искомый текст убрал табуляцию, энтер, пробелы и поставил регулярное выражение (?<=<pid="">)[A-Z]+spis(?=:</p>.*Apricot.*)
http://dropmefiles.com/ZtKR2
Возникло два вопроса:
1. Почему не работает trim
2. Какой синтаксис при замене. К примеру мне необходимо удалить только табуляцию и энтер {-String.Tab-}{-String.Enter-} и какой-нибудь еще символ. Какой синтаксис должен быть в строке? Так как Вы видите я вынужден делать сразу 3 экшена.
 
1) trim работает
функция длястрок, а не для блока текста.
2) Попробуйте замену по типу regex

{{-String.Tab-}|{-String.Enter-}|символ}
 
  • Спасибо
Реакции: Nikol
Большое спасибо rostonix. Кстати вот выражение - ответ из другой ветки форума, для всего списка. Парсим слово Apricot из второго списка. Берем всегда последнее значение.
(?<=<p\ id="">)\w\ spis(?=:</p>[\w\W]*?Apricot)
Файлы см. выше.
Можно взять самый верхний пример, но там для слова Apricot будет следующее выражение: (?<=<p\ id="">).*список(?=:</p>[\w\W]*?Apricot)
Берем самое последнее значение в списке.

Синтаксис строки замены понятен. Чтобы удалить все табуляции, переносы строки, пробелы и к примеру символы id, для Regex используем выражение:

{-String.Tab-}|{-String.Enter-}|{-String.Space-}+|id

В поле замена оставляем пустую строку.
 
Для того, чтобы удалить все табуляции, переносы строки и пробелы в Regex можно использовать и более короткое выражение, основанное на знаках регулярных выражений. В результате будет справедливо как выражение, основанное на макросах из третьей версии ZP:
{-String.Tab-}|{-String.Enter-}|{-String.Space-}+
так и выражение:
\t|\r|\s+
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)