Что нового

Как найти определённые сочетания символов в строке

Dk

Новичок
Сообщения
358
Репутация
2
Версия AutoIt: 3.4.1

Описание:
Всем хорошего время суток.

Мне нужны регулярные выражения для функции StringRegExp.
К сожалению сам я не могу, что то получается, что то нет. А времени мало.

Мне надо найти участки текста в следующих примерах (которые я здесь выделил жирным шрифтом).

1) <span class="mt-text-content mt-table-detail">3898423581</span> (Только цифры)

2)<a class="a-link-normal mt-link-content mt-table-main" target="_blank" href="http://www.amazon.de/gp/offer-listing/3898423581">€ 21,58</a>

3)<span class="mt-text-content mt-table-main">AA-O1-r21745</span>

4) <span class="mt-text-content mt-table-detail">Gebraucht - Wie neu</span> (Только буквы)

5) <span class="mt-text-content">1</span>

6) <input maxlength="8" value="1" class="a-input-text main-entry mt-input-text" data-initial="1" type="text">

7) <input maxlength="23" value="40,46" placeholder="-" class="a-input-text main-entry mt-icon-input mt-input-text" type="text">

8 ) <a class="a-link-normal mt-link-content" target="_blank"href="http://www.amazon.de/gp/offer-listing/3409115854">Niedrigster</a>

9) <span class="mt-text-content">9783898423588</span>

10) <span class="mt-text-content mt-table-main">372.883</span>

11)<li id="SalesRank">
<b>Amazon Bestseller-Rang:</b>
Nr. 660.121 in Bücher (<a href="http://www.amazon.de/gp/bestsellers/books/ref=pd_dp_ts_b_1">Siehe Top 100 in Bücher</a>) (Здесь нужно только 660.121 )



Примечания:
Просьба очень индивидуальна, я думал как назвать тему ... и назвал вот так.
Я не открыл тему в разделе "Регулярные выражения, так как прошу, что бы сделали за меня, так как очень мало времени.
Спасибо Вам за помощь.

Что бы сузить результат используйте в рег. выражении по возможности всю строку, как точку для начала поиска. Тем самым сузится до 100% результат поиска, так как эти строки в HTML являются УНИКАЛЬНЫМИ, Кроме текста который выделен жирным шрифтом. Eсли же использовать для поиска только кусочек из какой либо строки, то выходит очень много совпадений.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Re: Регулярные выражения и работа с функцией StringRegExp

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"Регулярные выражения и работа с функцией StringRegExp" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Модератор.
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Re: Поиск определённых сочетаний символов в строке

Название поменял. Вроде должно подойти. Я всегда стараюсь назвать правильно, но работа с регулярными выражениями очень индивидуальна...
 

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
Dk
Выложите код html.
"Отпарсить" нужно указанном порядке или необязательно?
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
mr.Gbabak сказал(а):
Dk
Выложите код html.
"Отпарсить" нужно указанном порядке или необязательно?

К сожалению код хтмл выложить не могу. Но я думаю есть ведь возможность и по этим кусочкам вытащить. Если нет, то скажите в каком примере наиболее трудно, я постараюсь больше кусок хтмл запостить.
Порядок не обязателен.
В идеале мне нужен StingRegExp Который я мог бы просто подставлять в скрипт.
К примеру
Код:
$b ='<span class="mt-text-content mt-table-detail">3898423581</span>'
$a = StringRegExp(.........)
MsgBox('Titel','Title2',$a)

Всё вместе делать не нужно. На каждую сточку свой StringRegExp
 

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
Dk
Я правильно понял, вам подойдут несколько простых рег.выражений?
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
mr.Gbabak сказал(а):
Dk
Я правильно понял, вам подойдут несколько простых рег.выражений?

Да, рег.вырожения, для каждой строки. Так как на сколько я понял, они для каждой строки (которые я уаказал) сильно отличаются.
Мне бы решение в такой форме

1) <span class="mt-text-content mt-table-detail">3898423581</span> - StringRegExp (......)
2) .....
3)...


Добавлено:
Сообщение автоматически объединено:

В дальнейшем я хочу использовать эти рег.вырожения когда буду искать в хтмл , то что я выделил жирным шрифтом, а не в строчках как я указал в примере. Надеюсь это не сильно топорно и сработает. Так как пока у меня нет возможности запостить весь хтмл-код.
 

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
по каждой строчке...но в полной странице HTML кода совпадений будет гораздо больше.
Код:
#include 'Array.au3'

$read = fileread (@scriptdir&'/1.txt')
;msgbox (0, '',$read)
$string=StringRegExp ($read, '>(\d.*?)<',3); только для цифр
If @error Then Exit MsgBox(0,0,'Не подходит по паттерн')
_ArrayDisplay ($string)


$string=StringRegExp ($read, '>\S\s(.*?)\[/',3); поиск доллара

_ArrayDisplay ($string)

;3) строка

$string=StringRegExp ($read, '>(.*?)<',3);все значения между тегами <span>

_ArrayDisplay ($string)

;6)7)
$string=StringRegExp ($read, 'value="(.*?)"',3); 

_ArrayDisplay ($string, '6 7')


;11
;6)7)
$string=StringRegExp ($read, '\.\s(.+?)\s',3); 

_ArrayDisplay ($string, '11')
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
mr.Gbabak

Код:
#include <IE.au3>
#include <Array.au3>

$oIE = _IECreate('http://www.amazon.de/Android-Apps-entwickeln-Galileo-Computing/dp/3836219484/ref=sr_1_1?ie=UTF8&qid=1455706673&sr=8-1&keywords=9783836219488', 0, 1)
$htmlBody = _IEBodyReadHTML($oIE)
Sleep(5000)
$string=StringRegExp ($htmlBody, '\.\s(.+?)\s',3);

MsgBox(1,'','',$string)



Если я хочу применить эти регулярные выражения к хтмл, то у меня вообще ничего не находит. ( пример 11)


Аmazon эта страница открыта для общего доступа)

найти хочу (к в примере 11 указанно было)

Amazon Bestseller-Rang: Nr. 206.938 in Bücher (Siehe Top 100 in Bücher)


Но ничего не выходит. Помогите в чём ошибка? :'(
 

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
Код:
#include <IE.au3>
#include <Array.au3>

$oIE = _IECreate('http://www.amazon.de/Android-Apps-entwickeln-Galileo-Computing/dp/3836219484/ref=sr_1_1?ie=UTF8&qid=1455706673&sr=8-1&keywords=9783836219488', 0, 1)
_IELoadWait($oIE); лучше выставлять задержку так.
$htmlBody = _IEBodyReadHTML($oIE)

$string=StringRegExp ($htmlBody, '\.\s(.+?)\s',3);
;$string=StringRegExp ($htmlBody, 'Nr\.\s(.*?)\s\w',3);ну или вообще вот так)) так один результат, но тут есть варианты тоже
_ArrayDisplay ($string); все найденные результаты.
MsgBox(1,'',$string[26]); с запятыми аккуратнее
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Да, работает.

Вы Можете сделать (2 Строка) 2)<a class="a-link-normal mt-link-content mt-table-main" target="_blank" href="http://www.amazon.de/gp/offer-listing/3898423581">€ 21,58[/url]

Максимально точно. Сама страница закрыта для общего доступа. Но когда я вбиваю ваш пример для второй строчки мне MsgBox показывает 1. А _ArrayDisplay ничего не показывает.
Мне Ооочен важна именно вторая строка, что бы находил 21,58.
Может вы уточните её какнибудь, как в этом примере, который вы только что указали. :-[ :-[ :-[ :whistle:


Добавлено:
Сообщение автоматически объединено:

Я попробывал ещё несколько рег.выражений. Он находит очень много. Вы могли бы сузить результат исползуя строку.
Например здесь

7) <input maxlength="23" value="40,46" placeholder="-" class="a-input-text main-entry mt-icon-input mt-input-text" type="text">
$string=StringRegExp ($read, 'value="(.*?)"',3);

Ведь можно же указать не с 'value=" а с <input maxlength="23" value=" И тогда результат будет 100%
У вас везде слишком много значений подпадай под рег. выражения.
Результат нужно сузить используя именно всю строку, а не только часть ...
Было бы супер :-[
 

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
Если строка уникальна, и не меняется, то просто вписываете всю строку и все.
Код:
#include <IE.au3>
#include <Array.au3>

$oIE = _IECreate('http://www.amazon.de/Android-Apps-entwickeln-Galileo-Computing/dp/3836219484/ref=sr_1_1?ie=UTF8&qid=1455706673&sr=8-1&keywords=9783836219488', 0, 1)
_IELoadWait($oIE)
$htmlBody = _IEBodyReadHTML($oIE)
$htmlBody = FileRead (@scriptdir&'/1.txt')
$string=StringRegExp ($htmlBody, 'href="http://www.amazon.de/gp/offer-listing/3898423581">\S\s(.*?)\[/url]',3)
_ArrayDisplay ($string)
MsgBox(0,'',$string)
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Строка уникальна до и после текста, который я выделил жирным шрифтом.
У вас слишком размытые рег.выражения. под них попадает очень большое количества мусора.
Что бы сузить результат используйте в рег. выражении по возможности всю строку, как точку для начала поиска. Тем самым сузится до 100% результат поиска, так как эти строки в HTML являются УНИКАЛЬНЫМИ ,Кроме текста который выделен жирным шрифтом, если же использовать для поиска только кусочек из какой либо строки, то выходит очень много совпадений
 

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
mr.Gbabak [?]
Если строка уникальна, и не меняется, то просто вписываете всю строку и все.
Я вам тоже самое написал, впишите сами всю строку в патерн!!!
Код:
StringRegExp ($htmlBody, '<a class="a-link-normal mt-link-content mt-table-main" target="_blank" href="http://www.amazon.de/gp/offer-listing/3898423581">">\S\s(.*?)\[/url]',3)
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
А зачем для HTML использовать регулярные выражения? Много раз уже обсуждалось это, что эти выражения как бы не предназначены / не являются лучшим решением для обработки HTML...
Можно же использовать через DOM объекты...
 
Верх