Что нового

Получение даты из Html-кода, с дополнительным условием

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
Есть html-код:
Код:
              	<tr>
        	<td class="date bold center">20.11.2013</td>
            <td class="bold cur"><span class="float_lang_base_1 ceFlags Brazil"> </span><a href="/markets/brazil">Бразилия</a></td>
            <td>Сан-Паулу фондовая биржа</td>
            <td class="last">День черного сознания</td>
        </tr>
              	<tr>
        	<td class="date bold center">22.11.2013</td>
            <td class="bold cur"><span class="float_lang_base_1 ceFlags Lebanon"> </span><a href="/markets/lebanon">Ливан</a></td>
            <td>Фондовая Биржа Бейрута</td>
            <td class="last">День Независимости Ливана</td>
        </tr>
              	<tr>
        	<td class="date bold center">23.11.2013</td>
            <td class="bold cur"><span class="float_lang_base_1 ceFlags Japan"> </span>Япония</td>
            <td>Токийская фондовая биржа</td>
            <td class="last"> День благодарения Труда</td>
        </tr>
              	<tr>
        	<td class="date bold center">24.11.2013</td>
            <td class="bold cur"><span class="float_lang_base_1 ceFlags Iceland"> </span><a href="/markets/iceland">Исландия</a></td>
            <td>Исландия фондовая биржа</td>
            <td class="last">Сочельник</td>
        </tr>
              	<tr>
        	<td class="date bold center">25.11.2013</td>
            <td class="bold cur"><span class="float_lang_base_1 ceFlags Argentina"> </span><a href="/markets/Аргентина">Аргентина</a></td>
            <td>Фондовая биржа Буэнос-Айреса</td>
            <td class="last">Национальный День</td>
        </tr>
              	<tr>
        	<td class="date bold center">28.11.2013</td>
            <td class="bold cur"><span class="float_lang_base_1 ceFlags United_States"> </span><a href="/markets/США">США</a></td>
            <td>Нью-Йоркская фондовоая биржа</td>
            <td class="last">День Благодарения</td>
        </tr>
              	<tr>
        	<td class="date bold center">29.11.2013</td>
            <td class="bold cur"><span class="float_lang_base_1 ceFlags United_States"> </span><a href="/markets/США">США</a></td>
            <td>Нью-Йоркская фондовоая биржа</td>
            <td class="last">The Day After Thanksgiving</td>
        </tr>
              	<tr>
        	<td class="date bold center">30.11.2013</td>
            <td class="bold cur"><span class="float_lang_base_1 ceFlags Philippines"> </span>Филиппины</td>
            <td>Philippines Stock Exchange</td>
            <td class="last">Bonifacio Day</td>
        </tr>
              	<tr>
        	<td class="date bold center">02.12.2013</td>
            <td class="bold cur"><span class="float_lang_base_1 ceFlags United_Arab_Emirates"> </span><a href="/markets/Дубай">ОАЭ</a></td>
            <td>Дубайская фондовая биржа</td>
            <td class="last">Национальный день</td>
        </tr>
              	<tr>
        	<td class="date bold center">05.12.2013</td>
            <td class="bold cur"><span class="float_lang_base_1 ceFlags Thailand"> </span>Тайланд</td>
            <td>Thailand Stock Exchange</td>
            <td class="last">The King's Birthday</td>
        </tr>
              	<tr>
        	<td class="date bold center">06.12.2013</td>
            <td class="bold cur"><span class="float_lang_base_1 ceFlags Finland"> </span><a href="/markets/Финляндия">Финляндия</a></td>
            <td>Фондовая биржа Хельсинки</td>
            <td class="last">День Независимости</td>
        </tr>
              	<tr>
        	<td class="date bold center">08.12.2013</td>
            <td class="bold cur"><span class="float_lang_base_1 ceFlags Colombia"> </span>Колумбия</td>
            <td>Colombia Stock Exchange</td>
            <td class="last">День Непорочного Зачатия</td>
        </tr>
              	<tr>
        	<td class="date bold center"></td>
            <td class="bold cur"><span class="float_lang_base_1 ceFlags Peru"> </span>Перу</td>
            <td>Lima Stock Exchange</td>
            <td class="last">День Непорочного Зачатия</td>
        </tr>
              	<tr>
        	<td class="date bold center">10.12.2013</td>
            <td class="bold cur"><span class="float_lang_base_1 ceFlags Thailand"> </span>Тайланд</td>
            <td>Thailand Stock Exchange</td>
            <td class="last">День Конституции</td>
        </tr>

Необходимо выделить только те даты, которые относятся к США, в данном случае это будут

Код:
28.11.2013
29.11.2013

Получить все даты для всех стран и отфильтровать не проблема, но кажется, что тут возможно обойтись одним регулярным выражением.
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
#include 'array.au3'
$file=FileRead(@ScriptDir&'\123.txt')
$str=StringRegExp($file,'(?s)<tr>(?:(?!<tr>).)*([0-9.]{10})(?:(?!</tr>).)*США',3)
_ArrayDisplay($str)
 
Автор
W

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
sngr
На том фрагменте работает, а на всем тексте(инет-страница), как ни странно, у меня выдает ошибку Autoit.

Код:
#include <Array.au3>

;$file = FileRead(@ScriptDir & '\123.txt')

$file = BinaryToString(InetRead('http://ru.investing.com/forex-tools/Календарь-праздников'), 4)

$str = StringRegExp($file, '(?s)<tr>(?:(?!<tr>).)*([0-9.]{10})(?:(?!</tr>).)*США', 3)
_ArrayDisplay($str)
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
#include <Array.au3>
$file = BinaryToString(InetRead('http://ru.investing.com/forex-tools/Календарь-праздников'), 4)
$str = StringRegExp($file, '(?s)<td class="date bold center">([0-9.]{10})(?:(?!<td>).)+США', 3)
_ArrayDisplay($str)
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
sngr, можешь объяснить почему (?!<td>). , а не .(?!<td>)
?
Ведь (?!...) это вроде как несовпадение образца справа.
Хотя работает и так, и так...
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Просто (?:(?!</tr>).)+ аналого инвертированного класса [^0-9]+ для нескольких, рядом стоящих символов. Как было записано у Фридла, так я и использую.
 
Верх