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

Nikol

Client
Регистрация
28.04.2013
Сообщения
184
Благодарностей
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>
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Регулярное выражение одинаковое. Берите просто первое вхождение.
Или берите начальной конструкцией (?<=</ol>[\w\W]*<p id="">)
 

Nikol

Client
Регистрация
28.04.2013
Сообщения
184
Благодарностей
11
Баллы
18
Благодарю Вас за ответ, но я немного не понял. Можно пояснить подробнее? И если можно касательно вышеприведенного примера.
Я пытался использовать следующее регулярное выражение, но где-то здесь ошибка:
(?<=<p(.*)?>).*список(?=.*(<p id="">.*список.*)?Apricot.*)
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Что то вы очень круто закрутили... Если задача просто взять в переменную название первого списка для кода, который Вы привели подойдет это регулярное выражение - (?<=<p\ id="">).*?(?=</p>) и совпадение под номером 0 и будет искомым названием - Важный список, под номером 1 - Второстепенный список
 

Nikol

Client
Регистрация
28.04.2013
Сообщения
184
Благодарностей
11
Баллы
18
Да я это знаю, но дело в том, что мне необходимо выпарсить каждый раз новое значение (название списка). Значение списка зависит от того, в какую часть попадает в данном случае Apricot. Каждый раз Apricot будет попадать в разные списки в Важный список и Второстепенный список. И, в зависимости от того, куда он попал, мне нужно значение (наименование) списка.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 714
Баллы
113
<p\ id="">[\w\W]*?(?=</ol>)
Складывать результаты в список со своим собственным разделителем. например слово BREAK
Потом брать построчно и парсить словом Apricot.
Если нашли чего, из тех же данных уже просто парсите название списка.
 

Nikol

Client
Регистрация
28.04.2013
Сообщения
184
Благодарностей
11
Баллы
18
Уважаемый rostonix благодарю Вас за Ваше время, но я пошел по другому пути.
Взял искомый текст убрал табуляцию, энтер, пробелы и поставил регулярное выражение (?<=<pid="">)[A-Z]+spis(?=:</p>.*Apricot.*)
http://dropmefiles.com/ZtKR2
Возникло два вопроса:
1. Почему не работает trim
2. Какой синтаксис при замене. К примеру мне необходимо удалить только табуляцию и энтер {-String.Tab-}{-String.Enter-} и какой-нибудь еще символ. Какой синтаксис должен быть в строке? Так как Вы видите я вынужден делать сразу 3 экшена.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 714
Баллы
113
1) trim работает
функция длястрок, а не для блока текста.
2) Попробуйте замену по типу regex

{{-String.Tab-}|{-String.Enter-}|символ}
 
  • Спасибо
Реакции: Nikol

Nikol

Client
Регистрация
28.04.2013
Сообщения
184
Благодарностей
11
Баллы
18
Большое спасибо 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

В поле замена оставляем пустую строку.
 

Nikol

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

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